【问题标题】:pymssql utf8: queries with back slashpymssql utf8:带反斜杠的查询
【发布时间】:2016-06-16 15:32:07
【问题描述】:

我有点好奇解决我的问题的 pythonic/最佳方法是什么。

一个简短的代码示例:

import pymssql
conn = pymssql.connect("SERVER", 'sa', 'PASSWORD', 'DATABASE', charset='utf8')

cursor = conn.cursor()

sql = "SELECT 'foo\bar' as bs_field"
cursor.execute(sql)
row = cursor.fetchone()
print row[0]
# missing \, returns u'foobar'

sql = "select FIELD_CONTAINING_BACKSLASH from TABLE"
cursor.execute(sql)
row = cursor.fetchone()
print row[0]
# all OK here

sql = "SELECT 'foo\\bar' as bs_field"
cursor.execute(sql)
row = cursor.fetchone()
print row[0]
# this is OK too

我想知道为什么第一个示例中缺少 \ - 是否有更好的解决方案来引用每个 sql?

【问题讨论】:

    标签: python sql-server python-2.7 unicode pymssql


    【解决方案1】:

    我是个白痴!

    与mssql无关,只是python字符串。

    r'bla\bla'
    'bla\\bla'
    

    参考:https://docs.python.org/2.0/ref/strings.html

    【讨论】:

    • 确实如此。请注意,在一些 数据库中(例如,对于 MySQL 和旧版本 PostgreSQL 的默认设置),反斜杠确实很特殊,您需要编写 r"SELECT 'foo\\bar'" 或 "SELECT 'foo\\\\bar'"。这不是符合 ANSI SQL 标准的行为,SQL Server 也不会这样做,但混淆是使用参数化查询而不是 SQL 字符串文字的另一个很好的理由。
    • 没错,我大部分时间都在使用这些,但如果你忘记了 python 基础知识,它也无济于事:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多