postgresql SQL Alchemy Insert语句无法插入,但没有错误

1tuwyuhd  于 5个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(96)

我试图在SqlAlchemy中执行原始SQL插入语句,SQL Alchemy在执行构造的插入语句时不会抛出错误,但数据库中不会出现行。
据我所知,这不是语法错误(参见第2条),这不是引擎错误,因为ORM可以正确执行等效的写入(见第1条),它也在寻找它应该写的表格(见第3条)。我认为这是一个交易没有被提交的问题,并试图解决这个问题(见第4条)但这并没有解决问题。是否有可能创建一个嵌套的事务,以及可以说什么会启动“第一个”?
感谢你的回答。
一些背景:
1.我知道ORM可以很方便的实现这个功能,而且它也能正常工作,但是对于我们的应用程序来说太慢了。我们决定尝试使用raw sql来实现这个写函数,因为它经常被调用,而ORM则用于其他所有的功能。使用ORM的等效方法工作得很好,并且两者都使用相同的引擎,所以这不可能是引擎问题,对吧?
1.我已经发布了一个SQL的例子,该方法使用原始SQL直接构造数据库,并且可以很好地读取,所以我不认为这是语法错误。
1.它与数据库进行了正确的通信,并且可以找到表,因为表和列名的任何语法错误都会抛出程序错误,所以它不仅仅是将内容放入'void'中。
1.在阅读了周围的内容后,我的第一个想法是,这是一个事务错误,一个事务正在创建而不是关闭,因此构建了execute语句,以确保事务被正确创建和提交。

with self.Engine.connect() as connection:
         connection.execute(Insert_Statement)
         connection.commit

字符串
1.所谓的“插入语句”已经使用sqlalchemy“text”函数转换为文本,我不太明白为什么如果我将构造的字符串直接传递给execute语句,它就不会执行,但在相关的情况下提到它。
其他可能相关的事情:Python3运行在一个单独的ec2示例上,而postgres数据库运行在另一个示例上。特别是表是一个timescaledb hypertable,它接收实时数据,因此需要非常快的写入,但可能不相关。
目前使用pg8000作为方言没有特别的原因,除了psycopg2是抛出错误时,试图执行一个等效的方法使用ORM。

lvjbypge

lvjbypge1#

只是为了回答这个问题,以防有人在这里结束:
正如@snakecharmerb指出的那样,问题是未能将提交作为一种方法调用。Gord Thompson还提供了一种替代方法,使用“开始”自动提交,而不是连接,这是一种“随你去提交”风格的事务。

44u64gxh

44u64gxh2#

需要在SQL Server的connection.execute()之后添加connection.commit()。否则,表中的Identity字段将递增,但事务将回滚。在大量故障排除后解决此问题。

相关问题