簡體   English   中英

AttributeError:'str'對象沒有屬性'execute'

[英]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_1val_1val_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM