【问题标题】:Python pyodbc returning \x0ePython pyodbc 返回 \x0e
【发布时间】:2014-05-20 14:19:04
【问题描述】:

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

查询的开头如下所示:

我的 SQL 代码:

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

我的python代码:

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

还有其他方法可以保证从查询中返回值吗?

【问题讨论】:

    标签: python sql pyodbc


    【解决方案1】:

    \016 是 \x0e 的八进制表示 因此,我认为这与您转义双引号的方式有关。在你的 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]

    【讨论】:

      【解决方案2】:

      您似乎正在尝试创建行的逗号分隔、带引号的字符串表示形式。不要尝试在数据库查询中这样做,字符串格式化不是 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))
      

      【讨论】:

        猜你喜欢
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多