SQLAlChemy INSERT返回具有多个值的主键

原学程将引见SQLAlChemy INSERT前往具备多个值的主键的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

SQLAlChemy INSERT返回具有多个值的主键 教程 第1张

成绩描写

我正在测验考试应用SQLAlChemy的Insert以及Execute办法,并将字典列表作为值,并与回拔出的ID。数据库为postgres,应支撑前往。

代码年夜致以下:

table = MyThing.__table__
insert_stmt = table.insert().values({"name": bindparam("name_val")}).returning(table.c.id)
values = [{"name_val": "a"}, {"name_val": "b"}]
result = session.execute(insert_stmt, values).fetchall()

(为了可读性以及1些混杂,停止了增加)

当值列表年夜于一时(如上例所示),我将获得:

sqlalChemy.ex.Progra妹妹ingError:(心思备份二.Progra妹妹ingError)出有要提与的成果

然则,当列表只要1个值时,将准确前往新ID。

我晓得我在应用Return的方法中能够漏掉了1些器械,但是我没有晓得是甚么。

推举谜底

雷同的绑定参数在您传播给session.execute的第两个参数的值列表中反复。

values在拔出多个值时应为列表,除非literal_binds选项树立为True,不然在默许情形下,SQLALCHEMY将绑定参数,以就在没有显式绑定参数的情形下履行操纵是平安的

values = [{"name_val": "a"}, {"name_val": "b"}]
insert_stmt = table.insert().values(values).returning(table.c.id)
result = session.execute(insert_stmt).fetchall()

假定您愿望保存现有的显式绑定,则为INSERT语句传播的values必需是症结字参数。您的现有盘问将革新以下:

bind_params = [{"name_val": "a"}, {"name_val": "b"}]
insert_stmt = table.insert().values(name_val=bindparam("name_val")).returning(table.c.id)
result = session.execute(insert_stmt, bind_params).fetchall()

佳了闭于SQLAlChemy INSERT前往具备多个值的主键的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。