注:本文适用于 Python 3 环境。
之前一篇博客记录了用 Psycopg2 库操作 PostgreSQL 数据库踩过的坑。本文就介绍用 Python 的另一个库 py-postgresql 操作 PostgreSQL 数据库时踩过的坑。
连接数据库时的编码问题
在用 py-postgresql 数据库建立连接时,同样需要指定客户端的连接编码。否则,在解码中文字符时也会抛出异常:
Traceback (most recent call last): File "./crawler.py", line 227, in CrawlByHost(host_list['whitelist']) File "./crawler.py", line 212, in CrawlByHost ChildCrawlProcess(host_item, date) File "./crawler.py", line 185, in ChildCrawlProcess for (url, ) in cursor.fetchall(): UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 37: ordinal not in range(128)
解决方法有两种:
- 在用
postgresql.open()
方法建立连接的同时,同时通过encoding
参数设置编码。示例代码如下:_settings = { 'client_encoding' : 'utf8' }) pg_conn = postgresql.open(user=_user, password=_password, host=_host, port=_port, database=_database, settings=_settings)
- 在用
postgresql.open()
方法建立连接后(返回值类型为postgresql.api.Connection
),通过修改postgresql.api.Connection
的settings
属性来设置编码。示例代码如下:pg_conn = postgresql.open(user=_user, password=_password, host=_host, port=_port, database=_database) # 下面两种方式皆可。 # pg_conn.settings['client_encoding'] = 'utf8' pg_conn.settings.update({ 'client_encoding' : 'utf8' }))
参考链接: