2017-10-28 12 views
1

sqlite3を使用してAWS RDSデータベースのテーブルbabyNameにデータをインポートしようとしています。私が試した二つの方法について、細かい毎回作品data_entry()最初のものが、第2 new_data_entry()は私にpython sqlite3の挿入テーブルエラー:カーソルが接続されていませんか?

Cursor is not connected

または

Not all parameters are used

エラーが発生しました。手伝っていただけませんか?

import mysql.connector 
from mysql.connector import errorcode 

# start connection 
try: 
    cnn = mysql.connector.connect(
    user = '*****', 
    password = '*****', 
    host = '*****-mysql.*****.us-****-1.rds.amazonaws.com', 
    database = '*******') 
    print('It works!') 
except mysql.connector.Error as e: 
    if e.errno == errorcode.ER_ACCESS_DENIED_ERROR: 
     print('Somethign is wrong with username or password') 
    elif e.errno == errorcode.ER_BAD_DB_ERROR: 
     print('Database does not exist') 
    else: 
     print(e) 

# start cursor 
import sqlite3 
c = cnn.cursor() 
def creat_table(): 
    c.execute("CREATE TABLE IF NOT EXISTS babyName (name TEXT, gender TEXT, frequency INTEGER, year TEXT)") 
def data_entry(): 
    c.execute("INSERT INTO babyName VALUES ('Mary', 'F', 1234, '2008')") 
    cnn.commit() 
    c.close() 
    cnn.close() 

def new_data_entry(): 
    name = 'Wendy' 
    gender = 'F' 
    frequency = 321 
    year = '2006' 
    c.execute("INSERT INTO babyName (name, gender, frequency, year) VALUES (?, ?, ?, ?)", (name, gender, frequency, year)) 
    cnn.commit() 
    c.close() 
    cnn.close() 

# creat_table() 
data_entry() 
print('It works!') 
new_data_entry() 

私が取得保管エラーメッセージ:

It works! 
It works! 
Traceback (most recent call last): 
    File "/Users/*****/sqlite3_python_cc.py", line 53, in <module> 
    new_data_entry() 
    File "/Users/*****/sqlite3_python_cc.py", line 45, in new_data_entry 
    c.execute("INSERT INTO babyName (name, gender, frequency, year) VALUES (?, ?, ?, ?)", values) 
    File "/Users/*****/anaconda/lib/python3.6/site-packages/mysql/connector/cursor.py", line 529, in execute 
    raise errors.ProgrammingError("Cursor is not connected") 
mysql.connector.errors.ProgrammingError: Cursor is not connected 

答えて

0

あなたがグローバルスコープの変数として保存されているデータベース、cnnへの接続を閉じているdata_entryの終わりに。 new_data_entryを実行しようとすると、接続は既に閉じられています。これはエラーを示しています。

代わりに、作業が終了するまで接続を開いたままにしておきます。

import sqlite3 
c = cnn.cursor() 

def creat_table(): 
    c.execute("CREATE TABLE IF NOT EXISTS babyName (name TEXT, gender TEXT, frequency INTEGER, year TEXT)") 
def data_entry(): 
    c.execute("INSERT INTO babyName VALUES ('Mary', 'F', 1234, '2008')") 
    cnn.commit() 

def new_data_entry(): 
    name = 'Wendy' 
    gender = 'F' 
    frequency = 321 
    year = '2006' 
    c.execute("INSERT INTO babyName (name, gender, frequency, year) VALUES (?, ?, ?, ?)", (name, gender, frequency, year)) 
    cnn.commit() 

def finish(): 
    c.close() 
    cnn.close() 

data_entry() 
print('It works!') 
new_data_entry() 
finish() 
+0

ありがとうございます。 mysql.connector.errors.ProgrammingError:すべてのパラメータがSQL文で使用されているわけではありません。問題はまだ "new_data_entry()"によって引き起こされたようです。私は "mysql.connector"を使用してデータベースに接続しますが、 "sqlite3"を使用してテーブルを作成します。私はこれをすることができますか? –

0

私は問題を解決しました!

def new_data_entry(): 
    name = 'Wendy' 
    gender = 'F' 
    frequency = 321 
    year = '2006' 
    c.execute("INSERT INTO babyName (name, gender, frequency, year) VALUES (%s, %s, %s, %s)", (name, gender, frequency, year)) 
    cnn.commit() 

def finish(): 
    c.close() 
    cnn.close() 

「?」をすべて変更します。 "%s"へとコードはすべて実行されます〜ありがとう!

関連する問題