Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在SQLAlchemy for PostgreSQL中不使用子查询从写入更新_Python_Postgresql_Sqlalchemy - Fatal编程技术网

Python 如何在SQLAlchemy for PostgreSQL中不使用子查询从写入更新

Python 如何在SQLAlchemy for PostgreSQL中不使用子查询从写入更新,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我正在编写一个查询,通过计算表列的值与另一个表中的列之间的差值来更新表列。在原始SQL中,它如下所示: 使现代化 产品 设置 数量=产品.数量-订单\项目.数量 从…起 订购商品 哪里 order\u items.order\u id=%order\u id\u 1 s 和products.code=订单项目产品代码; 我查看了SQLAlchemy文档,发现了一个关于更新表达式的问题: WHERE子句可以引用多个表。对于支持此功能的数据库,将生成UPDATEFORM子句,或者在MySQL上生成多

我正在编写一个查询,通过计算表列的值与另一个表中的列之间的差值来更新表列。在原始SQL中,它如下所示:

使现代化 产品 设置 数量=产品.数量-订单\项目.数量 从…起 订购商品 哪里 order\u items.order\u id=%order\u id\u 1 s 和products.code=订单项目产品代码; 我查看了SQLAlchemy文档,发现了一个关于更新表达式的问题:

WHERE子句可以引用多个表。对于支持此功能的数据库,将生成UPDATEFORM子句,或者在MySQL上生成多表更新。在不支持多表更新语句的数据库上,该语句将失败

我试图实现文档中所述的查询:

查询= 产品目录更新 .valuesquantity=产品\表c.数量-订单\项目\表c.数量 哪里 产品\表c.代码 ==选择[订单\项目\表格.c.产品\代码] 哪里 及_ 订单项目表c.订单id==订单id, 订单\项目\表c.产品\代码==产品\表c.代码, .as_标量 但不是一个简洁的更新。。。设置从表情上我得到了这个:

从sqlalchemy.dialogs导入postgresql strquery.compiledialect=postgresql.dialect 使现代化 产品 设置 数量=产品.数量-订单\项目.数量 哪里 产品代码= 选择 订单\项目。产品\代码 从…起 订购商品 哪里 order\u items.order\u id=%order\u id\u 1 s 和订单项目。产品代码=产品。代码 此外,此SQL查询并不完全正确,并且没有必需的FROM语句

因此,我试图找出我的查询表达式的错误所在,以及是否有可能在没有子查询的情况下在SQLAlchemy中实现与原始SQL等价的SQL。有什么想法吗

版本

操作系统:MacOS Python:3.8.x SQLAlchemy:1.3.20 数据库:PostgreSQL 11.x
提前谢谢

看来我看错了文档。我发布的链接解释了相反的情况,并提供了为不支持更新的数据库编写查询的示例

我刚刚编写了以下查询:

查询= 产品目录更新 .valuesquantity=产品\表c.数量-订单\项目\表c.数量 .whereproducts\u table.c.code==订单\u项目\u table.c.product\u代码 .whereorder\u items\u table.c.order\u id==order\u id 并生成正确的SQL:

使现代化 产品 设置 数量=产品.数量-订单\项目.数量 从…起 订购商品 哪里 products.code=订单\项目.产品\代码 和订单项目。订单id=%order\u id\u 1 s