我有一个 sqlite3 连接器,我想将一个字典列表插入到 sql 表中。 但是,此字典列表可能有一个额外的列,该列不属于 sql 表架构的一部分。
显然,我可以在使用
executemany
之前预先过滤字典列表以删除此列,这就是我目前正在做的事情。 sqlite3 是否有一种本地方法可以直接为我处理此过滤?如果我只是尝试插入不进行过滤的字典,它会失败并说我提供了超出必要的列。
https://docs.python.org/3/library/sqlite3.html#how-to-adapt-custom-python-types-to-sqlite-values
如何注册适配器可调用对象 另一种可能性是创建一个将 Python 对象转换为 SQLite 兼容类型的函数。然后可以使用 register_adapter() 注册该函数。
class Point:
def __init__(self, x, y):
self.x, self.y = x, y
def adapt_point(point):
return f"{point.x};{point.y}"
sqlite3.register_adapter(Point, adapt_point)
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("SELECT ?", (Point(1.0, 2.5),))
print(cur.fetchone()[0])