繁体   English   中英

使用pypyodbc访问名称中带有空格的表

[英]using pypyodbc to access a table with spaces in its name

这个命令工作正常。

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查询,它非常完美,我什至已将其应对并粘贴到带有数据库的控制台会话中进行测试,并且它返回的行数没有问题。 我尝试了单引号和双引号的所有不同组合。 看起来,如果放置一个表名称是一个没有任何引号的单词,它就可以正常工作。 如果我尝试放置一个包含多个单词的表名,则必须使用引号,否则它将失败。

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

您正在字符串内使用双引号,并且还对字符串定界。 请转义引号,或使用单引号分隔字符串,如下所示:

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

希望能有所帮助。

当数据库,表,存储过程或变量名的名称包含空格或特殊字符时,可以在名称两边加上方括号。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM