2
我想從使用pyodbc的python程序使用Microsoft的ODBC 11 SQL驅動程序插入Microsoft SQL Server數據庫。 (這是一口) 所以我測試了連接,子查詢,並在單獨的查詢中使用dateadd。這些都有效,但是當我試圖將它們放在這個插入語句中時,我在倒數第二行的倒數第二個'''處得到語法錯誤。我在這裏錯過了什麼?使用MS SQL的插入語法錯誤ODBC
cursor.execute("INSERT INTO room_use_log VALUES ("+
"(SELECT bldg_flr_spc_id FROM bldg_flr_spc WHERE rm_atl_nbr="+
rooms[y]["Name"] +"),'t','f',dateadd(ms,"+
str(int(str(r.get(rooms[y]["Name"]))[1:])) +", '1970-01-01'),"+
" dateadd(ms,"+
str(int(time.time())) +
", '1970-01-01')" #<----that one
)
這是整個錯誤:
Traceback (most recent call last):
File "DBGetRedis.py", line 59, in <module>
", '1970-01-01')"
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 11 for SQL Server]
[SQL Server]Incorrect syntax near ')'. (102) (SQLExecDirectW)")
它總是在你的鼻子下面。 – Sev09
雅...我是配對括號,但引號中的那些很難檢查。在我的發言中還有一個錯誤,提到獲得upvote。在where子句和另一側的等號後添加「'」。 – schumacherj
需要考慮的另一件事是:避免像SQL注入這樣的問題使用綁定參數是一種更好的做法。文檔在這裏:https://code.google.com/p/pyodbc/wiki/Cursor但是對於一個簡短的例子,你可以運行你的select,把它放到變量中,然後像這樣執行語句:cursor .execute(「INSERT INTO room_use_log(thisroom,thatroom,otherroom)VALUES(?,?,?)」,pyv_thisroom,pyv_thatroom,pyv_otherroom)「)任何以pyv *開頭的東西都是select中的Python變量。 ,目前睡眠不足! – FlipperPA