2017-10-28 111 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”,代码全部贯穿〜谢谢各位!