Psycopg2 UNICODEARRAY
Psycopg2 UNICODEARRAY
我有这个代码:
#!/usr/bin/python
import psycopg2
import psycopg2.extensions
conn = psycopg2.connect(dbname='my_database_name', ...)
cur = conn.cursor()
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE, conn)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY, conn)
cur.execute("SELECT * FROM t0;")
res = cur.fetchall()
print conn.encoding
print res
print res[0][0] # Output is true
print [res[0][0]]
但输出是:
UTF8
[(u'\u0410\u0411', u'\u0412\u0413')]
АБ
[u'\u0410\u0411']
为什么只有第三行是真的?字母上的u'\u***'怎么改?
这里的问题只是 Python 2 打印 unicode 类型的方式,这也是 Python 3 在 2008 年创建的原因之一。
在Python 2
$ python2
>>> s = u'АБ'
>>> type(s)
<type 'unicode'>
>>> print(s)
АБ
>>> print([s])
[u'\u0410\u0411']
但是在Python3
$ python3
>>> s = u'АБ'
>>> type(s)
<class 'str'>
>>> print(s)
АБ
>>> print([s])
['АБ']
您问题 "how to make printing of an array of strings better" 的最简单答案是 "Use Python 3!"
但是,不幸的是,您可能会被 Python 2 困住(如果是这种情况,我们深表歉意)。如果你坚持使用 Python 2,你可以伪造它:
$ python2
>>> s = u'АБ'
>>> print([s])
[u'\u0410\u0411']
>>> print('[' + ''.join(s) + ']')
[АБ]
虽然不漂亮,但很管用。希望您能够切换到 Python 3。(或者其他人对 Python 2 的回答可能比这个 hack 更好。)
我有这个代码:
#!/usr/bin/python
import psycopg2
import psycopg2.extensions
conn = psycopg2.connect(dbname='my_database_name', ...)
cur = conn.cursor()
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE, conn)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY, conn)
cur.execute("SELECT * FROM t0;")
res = cur.fetchall()
print conn.encoding
print res
print res[0][0] # Output is true
print [res[0][0]]
但输出是:
UTF8
[(u'\u0410\u0411', u'\u0412\u0413')]
АБ
[u'\u0410\u0411']
为什么只有第三行是真的?字母上的u'\u***'怎么改?
这里的问题只是 Python 2 打印 unicode 类型的方式,这也是 Python 3 在 2008 年创建的原因之一。
在Python 2
$ python2
>>> s = u'АБ'
>>> type(s)
<type 'unicode'>
>>> print(s)
АБ
>>> print([s])
[u'\u0410\u0411']
但是在Python3
$ python3
>>> s = u'АБ'
>>> type(s)
<class 'str'>
>>> print(s)
АБ
>>> print([s])
['АБ']
您问题 "how to make printing of an array of strings better" 的最简单答案是 "Use Python 3!"
但是,不幸的是,您可能会被 Python 2 困住(如果是这种情况,我们深表歉意)。如果你坚持使用 Python 2,你可以伪造它:
$ python2
>>> s = u'АБ'
>>> print([s])
[u'\u0410\u0411']
>>> print('[' + ''.join(s) + ']')
[АБ]
虽然不漂亮,但很管用。希望您能够切换到 Python 3。(或者其他人对 Python 2 的回答可能比这个 hack 更好。)