2017-10-28 311 views
1

我嘗試使用sqlite3將數據導入我的AWS RDS數據庫中的表babyName。對於這兩種方法我試過了,第一個每次data_entry()工作正常,但第二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

截至data_entry您已經關閉數據庫,cnn,它保存爲在全球範圍內的變量的連接端。當您嘗試運行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」,代碼全部貫穿〜謝謝各位!