gpt4 book ai didi

python - 通过 Python 类实现元组和 row_factory 功能

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:23 25 4
gpt4 key购买 nike

我在 Python 中使用 sqlite3,想知道是否有一种方法可以使用 Python 类在同一个数据库表的 Cursor 对象和 Row 对象之间进行选择。

换句话说,我可以做这样的事情吗:

class get_db:
def __init__(self, dbpath):
con = sqlite3.connect(dbpath, isolation_level=None)
self.tups = con.cursor()

con.row_factory = sqlite3.Row
self.dict = con.cursor()

然后我可以通过以下方式返回相同的值:

db = get_db('/path/to/sql.db')
db.tups.execute("SELECT * FROM table WHERE id=24").fetchone()[0] # For the first tuple element
db.dict.execute("SELECT * FROM table WHERE id=24").fetchone()['id'] # Which is the first tuple element as well

现在看来您在创建连接时必须选择其中之一。上面的示例返回 Row 对象,因为 row_factory 最后被调用。

最佳答案

需要考虑的一个重要事项是连接对象的执行方法是一个简写。它透明地创建一个游标,并返回该游标的执行方法。

当您将连接对象的 row_factory 属性设置为 sqlite3.Row 时,它是在整个连接上完成的 - 现在由此连接创建的游标将为其 row_factory 设置该属性。

你可能想做的是

class get_db:
def __init__(self, dbpath):
con = sqlite3.connect(dbpath, isolation_level=None)
self.tups = con.cursor()

self.dict = con.cursor()
self.dict.row_factory = sqlite3.Row

这样只有 self.dict 游标的 row_factory 才会更改。

关于python - 通过 Python 类实现元组和 row_factory 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19644069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com