使用pypyodbc访问名称中包含空格的表

时间:2014-03-20 19:31:40

标签: python sql sql-server pypyodbc

此命令正常工作..

count = conn.cursor().execute("select COUNT(*) FROM Orders;").fetchall()

但是这个命令会引发错误

count = conn.cursor().execute("select COUNT(*) FROM "Summary of Sales"; ").fetchall()

错误是..

Traceback (most recent call last):
  File "python-database.py", line 39, in <module>
    print(row_count())
  File "python-database.py", line 29, in row_count
    count = conn.cursor().execute(query).fetchall()
  File "/usr/local/lib/python2.7/dist-packages/pypyodbc.py", line 1595, in execute
    self.execdirect(query_string)
  File "/usr/local/lib/python2.7/dist-packages/pypyodbc.py", line 1621, in execdirect
    check_success(self, ret)
  File "/usr/local/lib/python2.7/dist-packages/pypyodbc.py", line 985, in check_success
    ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
  File "/usr/local/lib/python2.7/dist-packages/pypyodbc.py", line 953, in ctrl_err
    raise ProgrammingError(state,err_text)
pypyodbc.ProgrammingError: (u'42000', u"[42000] [FreeTDS][SQL Server]Incorrect syntax near 'Summary of Sales'.")

我已经使用SQL分析器查看确切的sql查询并且它非常完美,我甚至将其应用并粘贴到数据库的控制台会话中进行测试,然后返回行数无问题。我尝试过单引号和双引号的所有不同组合。看起来如果把一个表名称放在没有任何引号的单个单词中,它就可以了。如果我尝试将一个包含多个单词的表名放在必须使用引号但它失败了。

希望你们能够对此有所了解,它已经阻止了我的项目:(

2 个答案:

答案 0 :(得分:3)

您在字符串中使用双引号,并且还要分隔字符串。要么转义引号,要么使用单引号来分隔字符串,如下所示:

count = conn.cursor().execute('select COUNT(*) FROM "Summary of Sales"; ').fetchall()

希望有所帮助。

答案 1 :(得分:1)

当数据库,表,存储过程或变量名称的名称包含空格或特殊字符时,您可以用方括号括起名称。

count = conn.cursor().execute("select COUNT(*) FROM [Summary of Sales];").fetchall()