小编Mat*_*ewD的帖子

如何使用freeTDS和unixODBC配置pyodbc以正确接受来自SQL Server的字符串?

我无法从MSSQL服务器获取有效的字符串到python.我相信在某处存在编码不匹配.我相信它是在ODBC层和python之间,因为我能够在tsql和isql中获得可读的结果.

pyodbc期望什么字符编码?我需要在链中进行哪些更改才能使其正常工作?

具体例子

这是一个简化的python脚本作为示例:

#!/usr/bin/env python
import pyodbc

dsn = 'yourdb'
user = 'import'
password = 'get0lddata'
database = 'YourDb'

def get_cursor():
    con_string = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (dsn, user, password, database)
    conn = pyodbc.connect(con_string)
    return conn.cursor()

if __name__ == '__main__':
    c = get_cursor()
    c.execute("select id, name from recipe where id = 4140567")

    row = c.fetchone()
    if row:
        print row
Run Code Online (Sandbox Code Playgroud)

该脚本的输出是:

(Decimal('4140567'), u'\U0072006f\U006e0061\U00650067')
Run Code Online (Sandbox Code Playgroud)

或者,如果脚本的最后一行更改为:

print "{0}, '{1}'".format(row.id, row.name)
Run Code Online (Sandbox Code Playgroud)

然后结果是:

Traceback (most recent call last):
  File "/home/mdenson/projects/test.py", line 20, in <module>
    print "{0}, …
Run Code Online (Sandbox Code Playgroud)

unicode unixodbc pyodbc freetds sql-server-2008

5
推荐指数
1
解决办法
7116
查看次数

标签 统计

freetds ×1

pyodbc ×1

sql-server-2008 ×1

unicode ×1

unixodbc ×1