获得executemany以接受Unicode字符串

时间:2019-02-25 10:07:51

标签: python python-3.x character-encoding pymssql

如何获得执行力来格式化准备好的SQL以写入unicode数据?

我有一个与此相似的准备好的查询:

insert into foobar select(select baz.somestring from baz where baz.whatever = %s ), %s

在准备好的查询中将%s直接更改为类似N'%s'的方法将不起作用,如何使pymssql用N'mystring'而不是简单的'mystring'来封装输入?

例如,当出现类似\ u5000之类的东西时,当前行为会在表中产生问号,而它应该保存\ u5000或任何其他Unicode字符。

1 个答案:

答案 0 :(得分:0)

  

如何让pymssql用N'mystring'而不是简单的'mystring'来封装输入?

如果创建适当的参数化查询,

pymssql将执行以下操作:

print(sys.version)  # 3.7.2 ...
print(pymssql.__full_version__)  # 2.1.4
#
sql = "SELECT COUNT(*) AS n FROM #tmp WHERE whatever = %s"
params = ('Ώπα',)
crsr.execute(sql, params)
print(crsr.fetchone())

SQL事件探查器显示查询的发送方式为

SELECT COUNT(*) AS n FROM #tmp WHERE whatever = N'Ώπα'