我试图在我的SQL查询中返回一个硬编码值,但是当使用pyodbc运行查询时,随机记录会返回' \ x0e'而不是硬编码值(在这种情况下' 16')。如果我在服务器上运行查询(MS SQL Server 2008),查询将返回所有正确的结果和值。
查询的开头如下所示:
我的SQL代码:
Select '"16","' + S.ShipNum + '","'
我的python代码:
cursor.execute("""Select '\"16\",\"' + SS.ShipNum + '\",\"'
是否有其他方法可以保证查询返回值?
答案 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))