簡體   English   中英

用變量名寫入SQLite表(Python)

[英]Writing to SQLite tables with variable names (Python)

我正在嘗試使用SQLite和Python將五個變量寫入數據庫中的表。 以下是我的代碼和出現的錯誤:

碼:

        cur.execute("CREATE TABLE IF NOT EXISTS " + table_name + " (Date real, Morning_5AM_9AM real, Day_9AM_6PM real, Evening_6PM_10PM real, Night_10PM_5AM real)")   # this works
        export_row= p_transpose.iloc[ii]                 # Note: p_transpose is the transpose of a DataFrame I read in from Excel
        date_object= p_transpose.iloc[ii,0]              # date_object is a string here
        date_object= date_object.replace('_','')
        export_date= int(date_object)                    # to insert into database table as int instead of string 
        export_morning= p_transpose.iloc[ii,1]
        export_day= p_transpose.iloc[ii,2]
        export_eve= p_transpose.iloc[ii,3]
        export_night= p_transpose.iloc[ii,4]
        cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
        available_tables=[item[0] for item in cur.fetchall()]         # assigns a list of all table names in database
        for iii in range (0, row_count): 
            if (re.match('\w*'+df_feeder, available_tables[iii])):
                relevant_table= available_tables[iii]
                cur.execute("INSERT INTO " + relevant_table + "VALUES (?,?,?,?,?)" (export_date, export_morning, export_day, export_eve, export_night))

最后一行錯誤:

TypeError:“ str”對象不可調用

我確保export_...變量都不包含字符串,因此該字符串必須為relevant_table 但是,使用字符串變量創建表(再次參見上面的代碼)工作正常,所以我不明白為什么現在會出現此錯誤。

任何投入將不勝感激。 讓我知道是否還有其他有用的信息。

編輯

這是我的追溯,是使用traceback.format_exc()獲得的:

'Traceback (most recent call last):\n File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/idlelib/run.py"‌​, line 112, in main\n seq, request = rpc.request_queue.get(block=True, timeout=0.05)\n File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/Queue.py", line 176, in get\n raise Empty\nEmpty\n'

最終編輯,已解決:

有關信息,感謝scytale,現在可以使用:

cur.execute("INSERT INTO " + relevant_table + " VALUES (?,?,?,?,?)", (export_date, export_morning, export_day, export_eve, export_night))

我以為我已經嘗試過以所有可能的方式更改標點和間距,但這終於成功了。

您在SQL字符串后的最后一行中缺少逗號-應該是

cur.execute("INSERT INTO " + relevant_table + "VALUES (?,?,?,?,?)",
            (export_date, export_morning, export_day, export_eve, export_night))

確實,為清楚起見和將來的維護,您應該具體說明插入的內容和位置。 因此,您的語句應顯示如下內容:

    try:
        result = self.db.execute("insert into Recent (Filename,TimeStamp,Icon) values (?,?,?)",(filename,time_stamp,itype))
    except sqlite3.Error as e:
        wx.MessageBox('Insert Recent file list error'+str(e), 'Error', wx.OK | wx.ICON_INFORMATION)

這不僅使您清楚數據項是什么,還使您知道將它們放在何處。
明確聲明要插入的內容的一個很好的理由是,如果您以后要向表中添加列,則代碼仍將按預期工作。

附帶說明一下,在調試方面,每個人都忘記了print語句的功能嗎?
有問題嗎? 打印出該死的東西,看看吧! 十分之九十分明顯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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