Sql Alchemy 插入语句插入失败,但没有错误
Sql Alchemy Insert Statement failing to insert, but no error
我正在尝试在 Sqlalchemy 中执行原始 sql 插入语句,SQL Alchemy 在执行构造的插入语句时不会抛出任何错误,但这些行不会出现在数据库中。
据我所知,这不是语法错误(参见第 2 项),也不是引擎错误,因为 ORM 可以正确执行等效写入(参见第 1 项),它正在寻找table 也该写了(见第3条)。我认为这是一个未提交事务的问题,并试图解决这个问题(见第 4 条),但这并没有解决问题。是否可以创建嵌套事务以及什么会启动 'first' 可以这么说?
感谢您的任何回答。
一些背景:
我知道 ORM 促进了这一点并且已经使用了这个功能并且它有效,但对于我们的应用程序来说太慢了。我们决定尝试对这个特定的写入函数使用原始 sql,因为它被调用的频率以及其他所有内容的 ORM。使用 ORM 的等效方法非常有效,并且两者使用相同的引擎,所以它不会是引擎问题吧?
我发了一个SQL的例子,使用rawsql的方法直接构造到数据库,读起来没问题,所以我不认为这是一个语法错误。
它正在与数据库正确通信,并且可以找到 table,因为 table 和列名的任何语法错误都会引发程序错误,因此它不仅仅是将东西扔进'void'可以这么说。
看了一圈后我的第一个想法是事务错误,正在创建事务但没有关闭,因此构造了这样的执行语句以确保正确创建和提交事务.
with self.Engine.connect() as connection:
connection.execute(Insert_Statement)
connection.commit
所谓的'Insert Statement'已经用sqlalchemy'text'函数转成文本了,不太明白为什么不执行如果我将构造的字符串直接传递给执行语句,但在相关的情况下提及它。
其他可能相关的事情:
Python3 在单个 ec2 实例上是 运行,在另一个实例上是 postgres 数据库。 table 特别是一个 timescaledb hypertable 获取实时数据,因此需要非常快的写入,但可能不相关。
目前使用 pg8000 作为方言,除了 psycopg2 之外没有任何特殊原因,在尝试使用 ORM 执行等效方法时抛出错误。
所以这个问题得到了回答,以防其他人出现在这里:
正如@snakecharmerb 指出的那样,问题是未能将提交作为方法调用。 Gord Thompson 还提供了一种使用 'begin' 的替代方法,它会自动提交而不是连接,后者是 'commit as you go' 样式的事务。
我正在尝试在 Sqlalchemy 中执行原始 sql 插入语句,SQL Alchemy 在执行构造的插入语句时不会抛出任何错误,但这些行不会出现在数据库中。
据我所知,这不是语法错误(参见第 2 项),也不是引擎错误,因为 ORM 可以正确执行等效写入(参见第 1 项),它正在寻找table 也该写了(见第3条)。我认为这是一个未提交事务的问题,并试图解决这个问题(见第 4 条),但这并没有解决问题。是否可以创建嵌套事务以及什么会启动 'first' 可以这么说?
感谢您的任何回答。
一些背景:
我知道 ORM 促进了这一点并且已经使用了这个功能并且它有效,但对于我们的应用程序来说太慢了。我们决定尝试对这个特定的写入函数使用原始 sql,因为它被调用的频率以及其他所有内容的 ORM。使用 ORM 的等效方法非常有效,并且两者使用相同的引擎,所以它不会是引擎问题吧?
我发了一个SQL的例子,使用rawsql的方法直接构造到数据库,读起来没问题,所以我不认为这是一个语法错误。
它正在与数据库正确通信,并且可以找到 table,因为 table 和列名的任何语法错误都会引发程序错误,因此它不仅仅是将东西扔进'void'可以这么说。
看了一圈后我的第一个想法是事务错误,正在创建事务但没有关闭,因此构造了这样的执行语句以确保正确创建和提交事务.
with self.Engine.connect() as connection: connection.execute(Insert_Statement) connection.commit
所谓的'Insert Statement'已经用sqlalchemy'text'函数转成文本了,不太明白为什么不执行如果我将构造的字符串直接传递给执行语句,但在相关的情况下提及它。
其他可能相关的事情: Python3 在单个 ec2 实例上是 运行,在另一个实例上是 postgres 数据库。 table 特别是一个 timescaledb hypertable 获取实时数据,因此需要非常快的写入,但可能不相关。
目前使用 pg8000 作为方言,除了 psycopg2 之外没有任何特殊原因,在尝试使用 ORM 执行等效方法时抛出错误。
所以这个问题得到了回答,以防其他人出现在这里:
正如@snakecharmerb 指出的那样,问题是未能将提交作为方法调用。 Gord Thompson 还提供了一种使用 'begin' 的替代方法,它会自动提交而不是连接,后者是 'commit as you go' 样式的事务。