使用 MS SQL ODBC 插入时出现语法错误
Syntax Error with Insert using MS SQL ODBC
我正在尝试使用 Microsoft ODBC 11 SQL Driver for Linux 从使用 pyodbc 的 python 程序插入 Microsoft SQL 服务器数据库。 (这是一口)
所以我测试了连接、子查询,并在单独的查询中使用了 dateadd。这些都有效,但是当我尝试将它们全部放入此插入语句中时,我在倒数第二行的倒数第二个“)”处遇到语法错误。我在这里错过了什么?
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)")
您的 INSERT 语句中似乎缺少右括号。字符串中的最后一个括号正在关闭 dateadd,您还需要另一个来关闭 VALUES 部分。尝试:
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
)
编辑: 添加了下面评论中提到的单引号以修复语句。
我正在尝试使用 Microsoft ODBC 11 SQL Driver for Linux 从使用 pyodbc 的 python 程序插入 Microsoft SQL 服务器数据库。 (这是一口) 所以我测试了连接、子查询,并在单独的查询中使用了 dateadd。这些都有效,但是当我尝试将它们全部放入此插入语句中时,我在倒数第二行的倒数第二个“)”处遇到语法错误。我在这里错过了什么?
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)")
您的 INSERT 语句中似乎缺少右括号。字符串中的最后一个括号正在关闭 dateadd,您还需要另一个来关闭 VALUES 部分。尝试:
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
)
编辑: 添加了下面评论中提到的单引号以修复语句。