首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泡菜和pypyodbc光标

泡菜和pypyodbc光标
EN

Stack Overflow用户
提问于 2015-11-01 20:53:12
回答 1查看 2K关注 0票数 1

我想序列化查询的结果。以下是我的例子:

代码语言:javascript
复制
import pypyodbc
import pickle

connection_string ='Driver={SQL Server Native Client 11.0};Server=localhost;' \
                       'Database=someDB;Uid=someLogin;Pwd=somePassword;'
connection = pypyodbc.connect(connection_string)
sql_query = "SELECT * FROM SomeTable"
cur = connection.cursor()
cur.execute(sql_query)
query_list = list(cur)

with open(r'D:\query_result', 'wb') as f:
    pickle.dump(query_list, f)
cur.close()
connection.close()

它会产生以下错误:

代码语言:javascript
复制
_pickle.PicklingError: Can't pickle <class 'pypyodbc.TupleRow.<locals>.Row'>: 
attribute lookup Row on pypyodbc failed

我想泡菜并不完全支持pypyodbc对象。什么是解决办法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-02 02:54:41

我能够使用pypyodbc重新创建这个问题,而相同的代码似乎在pyodbc中运行得很好。pypyodbc可能的解决方法之一是将结果转换为字典对象的列表,然后序列化:

代码语言:javascript
复制
import pickle, pypyodbc
connection_string = (
    r"Driver={SQL Server Native Client 10.0};"
    r"Server=(local)\SQLEXPRESS;"
    r"Database=myDb;"
    r"Trusted_connection=yes;"
)
connection = pypyodbc.connect(connection_string)
cur = connection.cursor()
cur.execute("SELECT * FROM Donors")

column_names = [x[0] for x in cur.description]
query_list = [dict(zip(column_names, row)) for row in cur.fetchall()]

with open(r'C:\Users\Gord\Desktop\query_result', 'wb') as f:
    pickle.dump(query_list, f)
cur.close()
connection.close()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33467085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档