1

我在 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 是最后调用的。

4

1 回答 1

1

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

当您将连接对象的 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。

于 2013-11-01T01:17:18.223 回答