在apsw上重现pysqlite的row_factory

rel*_*ima 3 python sqlite pysqlite

我一直在尝试从pysqlite迁移到apsw,但我找不到重现其row_factory函数的方法.

这是我的原始代码:

connection = sqlite3.connect("db.db3")
connection.row_factory = sqlite3.Row
cursor = connection.cursor()
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

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])
Run Code Online (Sandbox Code Playgroud)

是否可以将apsw用于同样的目的?

Rog*_*nns 6

披露:我是APSW的作者

是的,非常容易.APSW有一种叫做行示踪剂在记录http://apidoc.apsw.googlecode.com/hg/execution.html#tracing

每行调用行跟踪器.您可以完全通过返回无跳过行,或者让你基于什么传入想要的任何数据类型(这是伟大的测试).如果行跟踪器安装在Connection上,则它会影响所有游标.如果在游标上,那么只有该游标受到影响.Cursor.getdescription将允许您获取列名称和声明的类型.

你上面的代码实际上并没有通过其工作方式是pysqlite和APSW号使用row_factory你的索引行.sqlite3.Row确实让你按名称索引,所以最后一行代码是:

s[str(row.wbcode)+str(row.Year)]=float(row[query_name])
Run Code Online (Sandbox Code Playgroud)

BTW也有由pysqlite笔者运行Python SQLite的组和我联系,从pysqlite和APSW网站.