当前位置: 首页 > 面试题库 >

使用python sqlalchemy通过WITH语句执行原始查询

宓文斌
2023-03-14
问题内容

我正在尝试使用原始sqlalchemytext()查询将值插入Postgres11数据库。通过psql-
client运行以下SQL查询时,它可以正常运行:

WITH a AS (
  INSERT INTO person (id) 
       VALUES ('a')
    RETURNING id
) 
INSERT INTO person_info (person_id) 
     SELECT id 
       FROM a;

所有行均正确插入:

# select id from person;
 id 
----
 a
(1 row)

但是,如果我在sqlalchemy中创建一个引擎,并使用相同的查询在其上调用execute,它会成功运行,但不会插入任何行:

>>> engine.execute("WITH a AS (INSERT INTO person (id) VALUES ('b') RETURNING id) INSERT INTO person_info (person_id) SELECT id from a")
<sqlalchemy.engine.result.ResultProxy object at 0x7f25e6c2a090>

但是没有插入新行:

# select id from person;
 id 
----
 a
(1 row)

通过psql-client运行查询与通过sqlalchemy执行查询有何不同?


问题答案:

我的问题在github上得到了回答。

解决方案是将执行包装在事务上下文中:

with engine.begin() as conn:
   conn.execute("whatever")


 类似资料:
  • 我有一个结构为INSERT语句的备份文件。我的方法是编写一个方法从文件中加载这些语句,并使用JDBC模板执行它们。 编辑:另外,SQL Developer如何处理这些长字符串文本?

  • 问题内容: 因此,我有一个很小的查询可以在我的数据库上运行,并且在MySQL Workbench中可以正常工作。基本上,再次使用带有左联接的SELECT和带有左联接的UNION。 在尝试将其翻译为Laravel时没有成功。 我遇到了错误 Builder.php 1249行中的ErrorException:未定义的属性:Illuminate \ Database \ Eloquent \ Build

  • 因此,我在数据库上运行了这个小查询,它在MySQL工作台上运行良好。基本上,使用左连接进行选择,然后再次使用左连接进行并集。 年,他试图把它翻译成拉威尔,但没有成功。 我发现了错误 生成器中的错误异常。php第1249行:未定义的属性:Illumb\Database\Eloquent\Builder::$bindings 我如何在Laravel中执行一个完全原始的查询,或者如何在Laravel中以

  • 我真的需要帮助,我在stackoverflow上找到的所有问题中都搜索到了,但没有任何效果。我以前从未使用过hibernate,我不知道自己做错了什么 这是我的存储库:https://github.com/ionutincau/test_db 我收到了这个错误:

  • 我在使用以下方言创建表时遇到以下错误 “org.hibernate.dialoget.mysqlinoddDialogic”

  • 问题内容: 在python中创建多行的干净方法是什么?我想在一个内打开多个文件,但它足够靠右,足以在多行上显示。像这样: 不幸的是,这是一个。所以我尝试了这个: 也是语法错误。但是,这可行: 但是,如果我想发表评论怎么办?这不起作用: s的位置也没有任何明显的变化。 有没有一种干净的方法来创建允许多行注释的多行语句? 问题答案: 这在Python 3.9中已修复! https://github.c