【问题标题】:sqlalchemy raw sql query limit using connection.execute()使用 connection.execute() 的 sqlalchemy 原始 sql 查询限制
【发布时间】:2012-06-28 15:35:45
【问题描述】:

这段python代码应该在数据库上运行语句,但是sql语句没有执行:

from sqlalchemy import *
sql_file = open("test.sql","r")
sql_query = sql_file.read()
sql_file.close()
engine = create_engine(
    'postgresql+psycopg2://user:password@localhost/test', echo=False)

conn = engine.connect()
print sql_query
result = conn.execute(sql_query)
conn.close()

test.sql 文件包含创建 89 个表的 SQL 语句。

如果我指定 89 个表,则不会创建表,但如果我将表数减少到 2 个,则它可以工作。

conn.execute 中可以执行的查询数量是否有限制?如何运行任意数量的这样的原始查询?

【问题讨论】:

  • 好像你没有提交你的创建表。

标签: python postgresql sqlalchemy


【解决方案1】:

也许,强制自动提交:

conn.execute(RAW_SQL).execution_options(autocommit=True))

其他方法是使用事务并进行提交:

t = conn.begin()
try:
    conn.execute(RAW_SQL)
    t.commit()
except:
    t.rollback()

PD:您也可以将 execution_options 放在 create_engine 参数中。

【讨论】:

    【解决方案2】:

    为什么在 SQLAlchemy 中使用原始 SQL?如果你没有充分的理由,你应该使用其他方法:

    http://docs.sqlalchemy.org/en/rel_0_7/orm/tutorial.html

    http://docs.sqlalchemy.org/en/rel_0_7/core/schema.html#metadata-describing

    【讨论】:

    • 你是对的,我之前使用的是 psycopg2,这是我第一次涉足 sqlalchemy
    • 我不相信您可以忽略使用 SQL 调整应用程序的案例。 ORM 通常会做对,但有时您需要能够处理此类情况。
    • @MatthewB.Gray 根据我的经验,只有在您进行非常简单的操作时,它才会正确。或者它使查询查询成为活生生的地狱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2017-04-03
    • 2015-01-31
    • 2016-04-02
    • 1970-01-01
    • 2018-09-08
    • 2022-07-14
    相关资源
    最近更新 更多