我想添加一个选项,但是我在哪里出错?
conn=sqlite3.connect('tutorial.db')
c=conn.cursor()
def create_table():
c.execute('CREATE TABLE IF NOT EXISTS test (UNIX REAL, datestamp TEXT, keyword TEXT, value REAL)')
def data_entry(a,b,c,d):
c.execute("INSERT INTO test VALUES ({}, '{}', '{}', {})".format(a,b,c,d))
conn.commit()
c.close()
conn.close()
#create_table()
data_entry(1,"test","test2",3)
答案 0 :(得分:3)
c
中有一个局部变量def data_entry(a,b,c,d):
,它作为字符串传递,并用作execute
函数,最终完成"test2".execute()
。
该问题需要解决。一种解决方法是,如果我明确地使用curr
作为代表游标的变量。
conn=sqlite3.connect('tutorial.db')
curr=conn.cursor()
def create_table(curr):
curr.execute('CREATE TABLE IF NOT EXISTS test (UNIX REAL, datestamp TEXT, keyword TEXT, value REAL)')
#curr is the last argument
def data_entry(a,b,c,d, curr):
curr.execute("INSERT INTO test VALUES ({}, '{}', '{}', {})".format(a,b,c,d))
conn.commit()
curr.close()
conn.close()
#Explicitly passing curr to functions
create_table(curr)
data_entry(1,"test","test2",3, curr)
以后,请确保将变量命名为简短且具有描述性的变量,例如curr
,并可能将字符串命名为val_1
,val_2
等。这样您就可以从名称中知道变量是什么用于。
这是变量命名的好资源:PEP-8
答案 1 :(得分:2)
在原始代码中,局部参数c
遮盖了全局光标变量c
。您应该将游标和连接作为参数传递:
def create_table(cursor):
cursor.execute('CREATE TABLE IF NOT EXISTS test (UNIX REAL, datestamp TEXT, keyword TEXT, value REAL)')
def data_entry(cursor, conn, a, b, c, d):
cursor.execute("INSERT INTO test VALUES ({}, '{}', '{}', {})".format(a, b, c, d))
conn.commit()
cursor.close()
conn.close()
conn = sqlite3.connect('tutorial.db')
cursor = conn.cursor()
create_table(cursor)
data_entry(cursor, conn, 1,"test","test2",3)