Получить executemany принять строки Unicode - PullRequest
0 голосов
/ 25 февраля 2019

Как можно заставить executemany отформатировать подготовленный SQL для записи данных в юникоде?

У меня есть подготовленный запрос, подобный следующему:

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

Изменение% s непосредственно вчто-то вроде N '% s' в подготовленном запросе не будет работать, как мне заставить pymssql заключить мои входные данные в N'mystring 'вместо простой' mystring '?

Текущее поведение приводит к появлению вопросительных знаковв таблице, когда появляется что-то вроде \ u5000, например, при сохранении \ u5000 или любого другого символа Юникода.

1 Ответ

0 голосов
/ 01 марта 2019

как мне заставить 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 Profiler показывает, что запрос отправляется как

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