使用MS SQL ODBC插入时出现语法错误

时间:2015-01-06 20:44:00

标签: python sql-server pyodbc

我正在尝试使用pyodbc从python程序使用Microsoft ODBC 11 SQL Driver for Linux插入Microsoft SQL Server数据库。 (那是一口) 所以我测试了connect,子查询,并在单独的查询中使用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)")

1 个答案:

答案 0 :(得分:4)

似乎您在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
    )

修改:添加了下面评论中提到的单引号来修复该语句。