我正在使用 SQLAlchemy 在 SQL Server 中运行查询。 该查询应该创建一个表。 下面的示例旨在让您轻松重现。 它不包含我使用的实际查询。
如果我运行以下代码,则不会创建任何表。不会返回任何类型的错误或消息。 (请假设 URL_OBJECT 已正确创建)
from sqlalchemy import create_engine
engine = create_engine(URL_OBJECT, fast_executemany=True)
with engine.connect() as connection:
connection.execute("Select 1 as an_integer into database.schema.test_table")
--> 如果表“test_table”已经存在,我会收到一条错误消息,告诉我该表已经存在。
相反,以下方法有效:
from sqlalchemy import create_engine
engine = create_engine(URL_OBJECT, fast_executemany=True)
with engine.connect() as connection:
print(connection.execute("Select 1").fetchone())
返回:(1,)
这个也做了它应该做的事情。
from sqlalchemy import create_engine
engine = create_engine(URL_OBJECT, fast_executemany=True)
with engine.connect() as connection:
print(connection.execute("Select * datebase.schema.table_existing_in_database").fetchone())
返回:该表的第一行数据。
为什么我的建表代码没有执行,而 Select 语句却执行了?
您需要提交,否则默认情况下每个事务都会回滚。
参见:随心所欲
with engine.connect() as connection:
connection.execute("Select 1 as an_integer into database.schema.test_table")
connection.commit()
您可以通过设置
echo=True
中的create_engine()
来获取更多日志信息。如果提交不能解决这个问题,也许可以发布此示例中的信息。
您还应该将来自
text()
的 sql 语句包装在 sqlalchemy.sql
中。