Python pyodbc返回\ x0e

时间:2014-05-20 14:19:04

标签: python sql pyodbc

我试图在我的SQL查询中返回一个硬编码值,但是当使用pyodbc运行查询时,随机记录会返回' \ x0e'而不是硬编码值(在这种情况下' 16')。如果我在服务器上运行查询(MS SQL Server 2008),查询将返回所有正确的结果和值。

查询的开头如下所示:

我的SQL代码:

Select '"16","' + S.ShipNum + '","'

我的python代码:

cursor.execute("""Select '\"16\",\"' + SS.ShipNum + '\",\"'

是否有其他方法可以保证查询返回值?

2 个答案:

答案 0 :(得分:1)

\ 016是\ x0e的oct表示 所以我认为它更多地与你逃避双引号的方式有关。在你的python中你实际上是在设置\ 16而不是" 16"如你所愿。

你应该尝试一个准备好的声明。

ps = db.prepare("SELECT 16")
ps()

返回:     [(16)]

这里可以看到附加示例: [http://python.projects.pgfoundry.org/docs/0.8/driver.html#parameterized-statements]

您可以在此处查看所有ascii和其他字符集 [http://donsnotes.com/tech/charsets/ascii.html]

答案 1 :(得分:0)

看起来您正在尝试创建该行的逗号分隔,引用的字符串表示形式。不要尝试在数据库查询中执行此操作,字符串格式化不是T-SQL的优势之一。

使用parameter传递静态值,然后使用join行值。使用sys.databases作为示例:

params = ("Some value",)
sql = "SELECT ?, name, user_access_desc FROM sys.databases"
for row in cursor.execute(sql):
    print(','.join('"{0}"'.format(column) for column in row))