:我想添加一个选项,但是哪里出错了?
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)
发布于 2019-05-20 01:27:47
在def data_entry(a,b,c,d):
中有一个局部变量c
,它被作为字符串传递,并被用作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
发布于 2019-05-20 01:29:26
在您的原始代码中,您的本地参数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)
https://stackoverflow.com/questions/56210288
复制相似问题