【问题标题】:How to insert unicode string in Database using Pyodbc with python2.7如何使用带有 python2.7 的 Pyodbc 在数据库中插入 unicode 字符串
【发布时间】:2020-04-07 09:08:43
【问题描述】:

下面是我的示例代码:

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

当我运行此代码 sn-p 时,我得到的输出为“M?N?R?C”,因为我在编码时使用了替换。 如果我不使用替换,它会给出一个错误,不会对字符串进行编码。 有人可以帮助如何在数据库中使用 pyodbc 插入 unicode 字符串而不替换字符/数据丢失。

【问题讨论】:

  • 如果您不使用“替换”选项,您能否提供完整的回溯(错误)?
  • 感谢您的快速响应,它给出了一个错误:'utf8' codec can't decode byte 0xdc in position 1: invalid continuation byte

标签: python sql unicode pyodbc


【解决方案1】:

首先,您可能会受到其他因素的限制,但最好停止使用 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()

【讨论】:

  • 感谢您的回复。在我的场景中,我将无法添加/修改变量 name_unicode,因为它是我从文件中获取的数据,它没有后缀“u”。我尝试添加 # -- coding: utf-8 -- 但它不起作用。请帮忙。同样的场景也适用于 python 3,因为在 python3 中默认值是 unicode 但在 python2 的情况下,这会失败。
  • 如果你是从文件中获取它,那么你需要弄清楚文件编码是什么(因为它显然不是 utf8)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
相关资源
最近更新 更多