2011-07-13 46 views
1

在此處和Web上進行了長時間的搜索,似乎找不到任何示例說明我爲什麼會在以下語言中遇到語法錯誤: import win32com.clientINSERT INTO SELECT語法錯誤與Microsoft Access的Python ODBC

` 
     PregCode = recordsetraw.Fields.Item("PregnancyCode").value 
     SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s" 
     params = (PregCode) 
     connection.execute(SQL, params) 
     print PregCode 
    recordsetraw.MoveNext()` 

,我發現了以下錯誤:

回溯(最近通話最後一個): 文件 「testdb.py」 22行,在 connection.execute(SQL,則params) 文件「 「,第2行,執行 pywintypes.com_error:(-214 7352567,'Exception occurred。',(0,u'Microsoft JET D atabase Engine',u「查詢表達式中的語法錯誤'PregnancyCode =%s'。」,無 ,5003000,-2147217900),無)

我已經嘗試在懷孕代碼中進行硬編碼,看看是否會有所作爲,但沒有,同樣的錯誤。

任何想法我做錯了什麼?

+1

execute()的第二個參數需要是一個序列。正如所寫,它是一個單一的價值。改用'(PregCode,)';注意尾隨逗號。逗號使它成爲一個元組。 – bernie

回答

1

我的Python是很生疏的,我不記得這是什麼類型的取代基被稱爲,但我認爲你想有所作爲類似這樣與你的INSERT語句:

>>> print "Hello %s" %("World") 
Hello World 

從代碼:

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s" 
params = (PregCode) 
connection.execute(SQL, params) 

麻煩是連接是一個ADO連接,其Execute Method將不會執行所需的Pythonic文本替換。

我想你之前應該做的文本替換在Python 你喂的INSERT字符串connection.execute也許是這樣的:

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s" %(PregCode) 
connection.execute(SQL) 

如果我沒有得到Python裏是相當正確的,希望它很接近足以讓你看到如何解決它。

順便說一句,您的標題提到了Python ODBC,但我沒有看到您的代碼完全使用ODBC。

+0

謝謝!解決了。你說得對,它是ADO。 –

0

你的SQL需要一個「INTO」子句:

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s" 
+0

對不起,這是一個錯字,在那裏有一個INTO,而且我仍然遇到錯誤。 –