【问题标题】:python sqlite3 insert table error: cursor is not connected?python sqlite3插入表错误:光标未连接?
【发布时间】:2018-04-10 01:14:39
【问题描述】:

我尝试使用 sqlite3 将数据导入到我的 AWS RDS 数据库中的表 babyName。对于我尝试的两种方法,第一个 data_entry() 每次都可以正常工作,但第二个 new_data_entry() 给了我

光标未连接

并非所有参数都被使用

错误。你能帮帮我吗?

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

【问题讨论】:

    标签: python mysql sqlite insert


    【解决方案1】:

    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()
    

    【讨论】:

    • 感谢您的回答。我收到这样的错误:mysql.connector.errors.ProgrammingError:并非所有参数都在 SQL 语句中使用。问题似乎仍然是由“new_data_entry()”引起的。我使用“mysql.connector”连接数据库,但使用“sqlite3”创建表;我可以这样做吗?
    【解决方案2】:

    我的问题解决了!

    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”,代码都跑通了~谢谢大家!

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 2013-07-17
      • 2015-07-18
      • 1970-01-01
      • 2021-07-25
      • 2020-07-22
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多