python – 在apsw上重现pysqlite的row_factory
作者:互联网
我一直试图从pysqlite迁移到apsw,但我不能
找到一种方法来重现其row_factory函数.
这是我的原始代码:
connection = sqlite3.connect("db.db3")
connection.row_factory = sqlite3.Row
cursor = connection.cursor()
我这样使用它:
query = """ SELECT wbcode, Year, """+query_name+"""
FROM innovotable WHERE commodity='"""+commodity_name+"""' and
"""+query_name+""" != 'NULL' """
rows = cursor.execute(query)
for row in rows:
s[str(row[0])+str(row[1])] = float(row[2])
是否可以将apsw用于同样的目的?
解决方法:
披露:我是APSW的作者
是的,非常容易. APSW在http://apidoc.apsw.googlecode.com/hg/execution.html#tracing记录了一个称为行跟踪器的东西
每行调用行跟踪器.您可以通过返回None完全跳过该行,或根据传入的内容制作您想要的任何数据类型(这非常适合测试).如果行跟踪器安装在Connection上,则它会影响所有游标.如果在游标上,那么只有该游标受到影响. Cursor.getdescription将允许您获取列名称和声明的类型.
上面的代码实际上并没有使用row_factory,因为你按照pysqlite和APSW中的数字对行进行索引. sqlite3.Row确实让你按名称索引,所以最后一行代码是:
s[str(row.wbcode)+str(row.Year)]=float(row[query_name])
顺便说一句,还有一个由pysqlite作者和我自己从pysqlite和APSW站点链接的Python SQLite组.
标签:python,sqlite,pysqlite 来源: https://codeday.me/bug/20190827/1739076.html