【发布时间】:2019-11-29 05:30:01
【问题描述】:
我正在尝试一次调用大量插入,这里有人推荐的方法是给.insert 一个字典列表。这是使用 SQLAlchemy Core。
举个例子:
try:
engine = db.create_engine(f"postgres://user:pass@myip/addressbook", connect_args={'connect_timeout': 5})
connection = engine.connect()
metadata = db.MetaData()
except exc.OperationalError:
print_error(f":: Could not connect to myip!")
sys.exit()
table_addressbook = db.Table('addressbook', metadata, autoload=True, autoload_with=engine)
list = []
list.append({'firstname': "John", 'lastname': "Doe"})
list.append({'firstname': "Jane", 'lastname': "Doe"})
query = db.insert(table_addressbook).values(list)
connection.execute(query)
但我收到一条错误消息,指出 id 列违反了非空约束。这是因为插入通常会自动生成主键id。如何使用此方法但指定应自动生成 id?或者我应该使用其他方法吗?
编辑
表名是addressbook。
列id 是integer 类型,默认sequence 'untitled_table_id_seq',约束是PRIMARY_KEY。这是由 Postico for Mac 自动生成的,但我一直能够在不包含 id 的情况下插入,并且它会从最后插入的 ID 自动递增。
列firstname 和lastname 是text 类型,没有默认值,没有约束。
【问题讨论】:
-
检查
address_book表声明并为id列添加uuid自动生成 -
我很困惑。它在任何其他示例中都会自动生成。此外,其他帖子中关于 uuid 自动生成的详细信息讨论了将系统的 MAC 地址与其他内容结合使用,但我所说的 ID 每次都会增加..
-
@Max,你能提供你是如何创建模型和连接代码的吗?
标签: python sqlalchemy