2015-08-08 66 views
0

我正嘗試使用Python創建一個DataFrame並將其寫入SQL表格。該表應以變量命名,具體來說table_nametable_name將隨着我的代碼運行而改變)。下面是我的代碼的相關部分嘗試此設置:使用Python創建具有變量名稱的SQL表格

con = sql.connect(r'/Users/linnk/Desktop/Results/Data.db') # Creates database to write to 
cur = con.cursor() 

...code... 

cur.execute('''CREATE TABLE IF NOT EXISTS ''' + table_name + ''' (Date, Morning1, Day1, Evening1, Night1, Morning3, Day3, Evening3, Night3)''') 

運行此給出了錯誤(最後一行):

OperationalError: near "-": syntax error 

我試着做一些修改到我的代碼的最後一行,但得到類似的錯誤。任何人都可以幫我發現我的錯誤/對我的代碼進行必要的調整嗎?有關信息,table_name包含一個字符串。

非常感謝您的任何建議。

編輯/ UPDATE:

從我讀過它似乎是更明智的字符串,然後傳遞給cur.execute():

stringexecute='''\'CREATE TABLE IF NOT EXISTS '''+ table_name +''' (Date, Morning1 real, Day1 real, Evening1 real, Night1 real, Morning3 real, Day3 real, Evening3 real, Night3 real)\'''' 
    cur.execute(stringexecute) 

的信息, strictgexecute輸出:

stringexecute= 'CREATE TABLE IF NOT EXISTS GUTUR_400_F1-KIAGA-1 (Date, Morning1Ph real, Day1Ph real, Evening1Ph real, Night1Ph real, Morning3Ph real, Day3Ph real, Evening3Ph real, Night3Ph real)' 

但是,該代碼仍然不起作用。它給出:

OperationalError: near "'CREATE TABLE ......'": syntax error 

任何進一步的幫助將不勝感激。我主要看和(失敗)試圖從以下資源的方法: http://www.sommarskog.se/dynamic_sql.html#objectnames https://docs.python.org/2/library/sqlite3.html

編輯

原來以下工作,只要變量table_name不包含「 - 」(可能還有其他符號):

cur.execute("CREATE TABLE IF NOT EXISTS " + table_name + " (Date, Morning1 real, Day1 real, Evening1 real, Night1 real, Morning3 real, Day3 real, Evening3 real, Night3 real)") 
+1

會發生什麼,如果你硬編碼表名? –

+0

這似乎工作 - 這會在數據庫中創建'Table1': cur.execute('''CREATE TABLE IF NOT EXISTS Table1(Date,Morning1,Day1,Evening1,Night1,Morning3,Day3,Evening3,Night3)'' ') – LinnK

+0

根據你最近的更新,似乎問題只是禁止的字符。你可以regex.sub執行表創建步驟之前? – James

回答

1

你爲什麼不使用:

cur.execute('CREATE TABLE IF NOT EXISTS {tab} (Date, Morning1, Day1, Evening1, Night1, Morning3, Day3, Evening3, Night3)' 
    .format(tab=table_name)) 
+0

不幸的是,這給我帶來了同樣的錯誤 – LinnK

0

將這個代碼:

def crear_tabla (name): 
cur = conn.cursor() 
cur.execute('''CREATE TABLE {tab} 
    (ID INT PRIMARY KEY  NOT NULL, 
    NAME   TEXT NOT NULL, 
    AGE   INT  NOT NULL, 
    ADDRESS  CHAR(50), 
    SALARY   REAL);'''.format(tab=name)) 
print ("Table created successfully") 
cur.close() 
conn.commit() 
相關問題