Как вставить строку Юникода в базу данных, используя Pyodb c с python2 .7 - PullRequest
0 голосов
/ 07 апреля 2020

Ниже приведен мой пример кода:

import pyodbc
conn = pyodbc.connect(driver = '{SQL Server}', \
                   server = 'localhost', \
                   uid = 'sa', \
                   pwd = '1234', \
                   autocommit = True, trusted_connection='yes', database = 'DB')                       
Objcursor = conn.cursor()
mystring1 = "MÜNRÜC"
mystring = mystring1.decode("utf-8",'replace')
sql = "INSERT INTO system (name) VALUES ('%s')" %(mystring)
Objcursor.execute(sql)
conn.Commit()

Когда я запускаю этот фрагмент кода, я получаю вывод как "M? N? R? C", так как я использовал замену при кодировании. если я не использую замену, это дает ошибку, не кодирует строку. Может кто-нибудь, пожалуйста, помогите о том, как вставить строку Unicode, используя pyodb c в базе данных без замены символа / потери данных.

1 Ответ

0 голосов
/ 07 апреля 2020

Во-первых, вы можете быть ограничены другими факторами, но было бы неплохо прекратить использование python 2.7, поскольку теперь оно не поддерживается.

Во-вторых, вы, кажется, не объявили кодировку вашего исходного файла, поэтому mystring1 = "MÜNRÜC", вероятно, не делает то, что вы думаете.

Решение:

Вы должны явно объявить кодировку вашего исходного файла, и это, вероятно, целесообразно для только использовать объекты Unicode (не python 2,7 строки). Вы можете сделать это явно так:

# -*- coding: utf-8 -*-
import pyodbc
conn = pyodbc.connect(driver = '{SQL Server}', \
                   server = 'localhost', \
                   uid = 'sa', \
                   pwd = '1234', \
                   autocommit = True, trusted_connection='yes', database = 'DB')            

objcursor = conn.cursor()  # lowercase names
name_unicode = u"MÜNRÜC"  # descriptive variable name
sql = u"INSERT INTO system (name) VALUES ('%s')" % name_unicode  # unicode objects
objcursor.execute(sql)
conn.Commit()
...