如何使用Pyodbc和python2.7在数据库中插入unicode字符串

问题描述 投票:0回答:1

下面是我的示例代码:

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()

运行此代码段时,由于在编码时使用了replace,因此输出为“ M?N?R?C”。如果我不使用replace,则会出现错误,无法对字符串进行编码。有人可以帮助您如何使用pyodbc在数据库中插入unicode字符串而不替换字符/数据丢失的问题。

python sql unicode pyodbc
1个回答
0
投票

首先,您可能会受到其他因素的限制,但是最好不要使用python 2.7,因为它现在不受支持。

第二,您似乎尚未声明源文件的编码,因此mystring1 = "MÜNRÜC"可能没有按照您的想象做。

解决方案:

您应该明确声明源文件的编码,并且only使用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()
© www.soinside.com 2019 - 2024. All rights reserved.