मुझे किसी MSSQL सर्वर से पायथन में मान्य स्ट्रिंग नहीं मिल सकती है। मेरा मानना है कि कहीं एक एन्कोडिंग मेल नहीं है। मेरा मानना है कि यह ओडीबीसी परत और पायथन के बीच है क्योंकि मैं tsql और isql में पठनीय परिणाम प्राप्त करने में सक्षम हूं।मैं फ्रीटीडीएस और यूनिक्सोडबीसी का उपयोग कर SQL सर्वर से तारों को सही तरीके से स्वीकार करने के लिए pyodbc को कैसे कॉन्फ़िगर कर सकता हूं?
पाइडबैक की क्या विशेषता एन्कोडिंग अपेक्षित है? इसे काम करने के लिए मुझे चेन में बदलने की क्या ज़रूरत है?
#!/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
इस स्क्रिप्ट का आउटपुट है:
विशिष्ट उदाहरण
यहाँ एक उदाहरण के रूप में एक सरल अजगर स्क्रिप्ट है
(Decimal('4140567'), u'\U0072006f\U006e0061\U00650067')
वैकल्पिक रूप से, अगर की अंतिम पंक्ति लिपि में बदल दिया गया है:
print "{0}, '{1}'".format(row.id, row.name)
तो परिणाम है:
Traceback (most recent call last):
File "/home/mdenson/projects/test.py", line 20, in <module>
print "{0}, '{1}'".format(row.id, row.name)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
एक प्रतिलिपि TSQL का उपयोग कर एक ही क्वेरी निष्पादित करने के लिए:
[email protected]:~# tsql -S cmw -U import -P get0lddata
locale is "C"
locale charset is "ANSI_X3.4-1968"
using default charset "UTF-8"
1> select id, name from recipe where id = 4140567
2> go
id name
4140567 orange2
(1 row affected)
और भी में isql:
[email protected]:~# isql -v yourdb import get0lddata
SQL> select id, name from recipe where id = 4140567
+----------------------+--------------------------+
| id | name |
+----------------------+--------------------------+
| 4140567 | orange2 |
+----------------------+--------------------------+
SQLRowCount returns 1
1 rows fetched
तो मैंने सुबह सुबह इस पर काम किया है और उच्च और निम्न देखा और यह पता नहीं लगाया कि क्या अस्वस्थ है।
विवरण
यहाँ संस्करण विवरण हैं:
- ग्राहक Ubuntu 12.04
- freetds v0.91
- unixodbc 2.2.14
- अजगर है 2.7.3
पायोडबैक 2.1.7-1 (उबंटू पैकेज से) & 3.0.7-beta06 (स्रोत से संकलित)
सर्वर SQL सर्वर एक्सप्रेस 2008 R2
साथ XP है यहाँ ग्राहक पर कुछ विन्यास फाइल की सामग्री को कर रहे हैं।
/etc/freetds/freetds.conf[global]
tds version = 8.0
text size = 64512
[cmw]
host = 192.168.90.104
port = 1433
tds version = 8.0
client charset = UTF-8
/etc/odbcinst.ini
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1
/etc/ODBC।ini
[yourdb]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = cmw
Database = YourDB
Charset = UTF-8
इस पर मेरे निरंतर काम में मैंने अब pyodbc का नवीनतम संस्करण संकलित किया है, 3.0.7-beta06, _but_ व्यवहार में कोई बदलाव नहीं है। – MatthewD