[英]AttributeError: 'str' object has no attribute 'execute'
我想添加一個選項,但是我在哪里出錯?
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)
在def data_entry(a,b,c,d):
有一個局部變量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_1
, val_2
等。這樣您就可以從名稱中知道變量的用途。
這是變量命名的好資源: PEP-8
在原始代碼中,局部參數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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.