【问题标题】:Python - format single quote in SQL statement PyODBCPython - 在 SQL 语句 PyODBC 中格式化单引号
【发布时间】:2015-12-02 20:49:35
【问题描述】:

我已经尝试了几个驱动程序:pymsql、pyobdc,但 SQL 中的格式单引号仍然存在问题。以下代码示例:

案例 1。

import pyodbc

UPDATE_SQL3 = """
    UPDATE STATION
    SET
        STATION_NAME = ?,
        STATION_TITLE = ?,
        ACTIVE = ?
    WHERE
        STATION_ID = ?
"""

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=local;DATABASE=DB;UID=me;PWD=pass')
cursor = conn.cursor()

cursor.execute(UPDATE_SQL3 %
                           (name,
                            title,
                            active,
                            id
                            ))

此代码无法编译:

"在字符串格式化期间并非所有参数都被转换"

案例 2。

UPDATE_SQL3 = """
    UPDATE STATION
    SET
        STATION_NAME = %s,
        STATION_TITLE = %s,
        ACTIVE = %s
    WHERE
        STATION_ID = %s
"""

我发现错误:

('42000', "[42000] [Microsoft][ODBC SQL Server 驱动程序][SQL 服务器]“The”附近的语法不正确。 (102) (SQLExecDirectW)")

一次title = u'102.7 The Fan'

案例 3。

UPDATE_SQL3 = """
    UPDATE STATION
    SET
        STATION_NAME = '%s',
        STATION_TITLE = '%s',
        ACTIVE = %s
    WHERE
        STATION_ID = %s
"""

错误:

('42000', "[42000] [Microsoft][ODBC SQL Server 驱动程序][SQL 服务器]'s' 附近的语法不正确。 (102) (SQLExecDirectW)")

在哪里name = u'Power Michiana\\'s Hits and Hip Hop'

什么是正确的处理方法?

【问题讨论】:

  • 对于案例 3 do name = u'Power Michiana\'s Hits and Hip Hop'
  • 我怎样才能正确地做到这一点?我试图替换字符 - title = title.replace("\\", ""),但我仍然看到 - title = u'Power Michiana\\'s Hits and Hip Hop'

标签: python sql sql-server python-2.7 pyodbc


【解决方案1】:

您的“CASE 1”基本上是正确的,但您没有正确地将参数传递给conn.execute。不要尝试使用字符串格式(通过% 运算符),只需将元组作为第二个参数传递给.execute,如下所示:

import pyodbc

# test data
name = u"Power Michiana's Hits and Hip Hop"
title = u"(some title)"
active = False
id = 1

conn_str = "DSN=myDb_SQLEXPRESS"
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
UPDATE_SQL3 = """\
UPDATE STATION
SET
    STATION_NAME = ?,
    STATION_TITLE = ?,
    ACTIVE = ?
WHERE
    STATION_ID = ?
"""
cursor.execute(UPDATE_SQL3, (name, title, active, id))
conn.commit()
conn.close()
print("Done.")

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多