无法在 python 中执行长 sql 语句? [复制]

Posted

技术标签:

【中文标题】无法在 python 中执行长 sql 语句? [复制]【英文标题】:Couldnt execute long sql statement in python? [duplicate] 【发布时间】:2019-11-09 12:23:05 【问题描述】:

我已将我的 sql 语句定义如下(注意换行符)

  def getTankSystemIds():
        sql='select tt.TankSystemId,ts.sitecode,tt.productid ' \
            'from  [dbo].[TankSystems] tt' \
            'left join [dbo].sites ts on tt.siteid=ts.siteid where ts.companyid=8' \
            'and ProductId in (10,4,2,3,11,4)'
        cursor = connectDB()
        cursor.execute(sql)
        records = cursor.fetchall()

调用此方法时,出现以下错误。我将单引号更改为 " 和 ''',""" 但都给出了相同的错误 我在这里做错了什么? 我也尝试在一条长行中提供 sql 语句。但是同样的错误

SyntaxError: Non-ASCII character '\xef' in file /Users/ratha/PycharmProjects/Processor/Utilities/DbConnector.py on line 86, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

【问题讨论】:

首先,您似乎缺少一些空格。在 tt 之后和 left join 之间,然后在 companyid=8 和 AND productID 之间。错误与您如何转义/不转义斜线有关。如果你把 SQL 放在一行没有斜杠,应该没问题。 @dfundako No..不是空格。我再次尝试输入一行也没有用 您的 SQL 无效。如果没有空格,您的第一个表别名将变为 ttleft,而不是 tt。所以当你引用 tt.siteid 时,它会失败。 【参考方案1】:

SQL 查询是从某处复制/粘贴,还是被另一个程序保存为 UTF-8 编码?它有一个字节顺序标记 (BOM),这就是 \xef 字符。 ASCII 不喜欢这样,因为它是 Unicode 的东西。

【讨论】:

以上是关于无法在 python 中执行长 sql 语句? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中执行雪花 SQL 语句时出现雪花 python 错误

Python 3.6.0的sqlite3模块无法执行VACUUM语句

python pymysql 执行比较时间的sql语句,在mysql中可以顺了执行,但是在python中执行为何报错?

求助,sql语句无法用到索引,执行很慢

python中脚本怎么执行sql语句?

python中脚本怎么执行sql语句?