SQLite插入类实例列表



假设我有两个类:Employee和Manager。每个员工都有一个姓名和部门属性(都是字符串),每个经理都有一个姓名和两个employee的列表。像这样:

employee_one = Employee('Jon', 'Sales')
employee_two = Employee('Jim', 'Sales')
manager_one = Manager('Tom', [employee_one, employee_two])

我需要做的是将经理的存储到一个表中(在我的情况下使用SQLite),该表包含名称列和雇员列,其中将包含雇员列表。我试着直截了当:

cur.execute("INSERT INTO managers VALUES (:name, :empolyees)",
{'name': manager_one.name,  'empolyees': manager_one.empolyees})

但是我得到一个错误- '不支持的类型'。

如何执行此操作?

你可以注册适配器,我想在你的情况下,它将是列表类型

示例将列表存储为json字符串

import sqlite3
import json
def adapt_list(l):
return json.dumps(l)
def test_adapt_subclass():
""" Adapting an object from a subclass. """
sqlite3.register_adapter(list, adapt_list)

with sqlite3.connect(':memory:') as conn:
conn.execute('CREATE TABLE tab(c TEXT);')
conn.execute('INSERT INTO tab VALUES(?);',
([1, 2], ))

for p in conn.execute('SELECT * FROM tab;').fetchall():
print(p[0])
deserialized = json.loads(p[0]))
print(deserialized)
test_adapt_subclass()

或者直接为Manager类创建一个adapt方法,将其存储在列

sqlite3.register_adapter(Manager, adapt_manager)

最新更新