Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 Core中执行多个独立语句?_Python_Mysql_Sqlalchemy - Fatal编程技术网

Python 在SQLAlchemy Core中执行多个独立语句?

Python 在SQLAlchemy Core中执行多个独立语句?,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我正在使用SQLAlchemy Core运行一些独立的语句语句用于分隔表和不相关的。因此,我无法使用标准的table.insert()来传递多个参数字典。现在,我正在这样做: sql_conn.execute(query1) sql_conn.execute(query2) 有没有什么方法可以让我一次完成这些操作,而不需要两次返回数据库?我使用的是MySQL 5.7和Python 2.7.11。同时运行两个查询既不明智,也不实用 允许这样的行为给黑客提供另一种通过“SQL注入”做坏事的方式是不

我正在使用SQLAlchemy Core运行一些独立的语句语句用于分隔表和不相关的。因此,我无法使用标准的
table.insert()
来传递多个参数字典。现在,我正在这样做:

sql_conn.execute(query1)
sql_conn.execute(query2)

有没有什么方法可以让我一次完成这些操作,而不需要两次返回数据库?我使用的是MySQL 5.7和Python 2.7.11。

同时运行两个查询既不明智,也不实用

允许这样的行为给黑客提供另一种通过“SQL注入”做坏事的方式是不明智的

另一方面,这是可能的,但不一定实用。您将创建一个存储过程,其中包含任意数量的相关(或不相关)查询。然后调用该过程。有些事情可能会使其不切实际:

  • 获取数据的唯一方法是通过有限数量的标量参数
  • 输出作为多个结果集返回;您需要使用不同的代码来查看发生了什么

如果您与MySQL服务器在同一台机器上,则往返延迟不重要。即使两台服务器位于同一个数据中心,通常也可以忽略它。当客户端和服务器被长距离分开时,延迟变得很重要。对于跨大西洋延迟,我们讨论的是100毫秒以上。巴西到中国的距离约为250毫秒。(很高兴我们没有生活在木星上。)

为什么把两种说法放在一起是个好主意?或者会有什么好处?@MauroBaraldi往返DB一次,而不是两次。@MauroBaraldi为了获得更好的性能,你必须进行权衡。例如,SQLAlchemy ORM批量查询。也许,这不是一个好方法。SQLAlchemy有一个关于performance@MauroBaraldi将查询批处理在一起是减少延迟的一种非常有效的方法。性能不仅限于优化查询运行所需的时间。如果查询是由我定义的,并且我们正在进行适当的参数化,则不会增加SQL注入的风险。即使是50秒的额外时间对我们来说也是一件大事,这就是为什么我问这个问题。我绝对不想为此使用存储过程,理论上也不应该这样做,因为我可以很容易地使用原始SQL而不是SQLAlchemy Core同时发送两个查询。因此,问题是通过SQLAlchemy Core实现这一点。@Eli-保护来自于不允许多查询。黑客喜欢把一个查询变成多个查询;这让他们有些窒息。示例-关闭引号并做一些讨厌的事情:
"; 删除…
,将其作为字符串的一部分。这是一个参数化问题,这就是我上面提到的。如果人们正在进行正确的参数化,就可以防止黑客进行堆叠查询。这与我们是否应该能够从SQLAlchemy一次运行多个查询是一个单独的问题。