我正在尝试使用SQLAlchemy和pymssql在远程MSSQL数据库中执行TSQL查询。我已经在数据库中直接测试了我的过程查询,它按预期工作,如果我直接通过pymssql运行它也可以。如果我运行常规的一个班轮查询,例如:
select table_name from INFORMATION_SCHEMA.tables
通过SQLAlchemy,它也可以正常工作。但是当我尝试执行以下TSQL查询时,它实际上并没有创建表:
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'SOME_TABLE')
BEGIN
CREATE TABLE SOME_TABLE (SOME_TEXT VARCHAR(255), SOME_TIME DATETIME)
END
它运行它成功,如果我尝试从执行中读取结果,它会给出“资源已经关闭错误”,因为它是一个CREATE查询。但是,如果我尝试将数据添加到表'SOME_TABLE',它会嘲笑我,并表示该表不存在。感觉它只是将查询作为函数上传但从不执行它。有任何想法吗?甚至更好;使用SQLAlchemy和pymssql执行时实际工作的TSQL查询。
谢谢,
答案 0 :(得分:2)
您需要在会话中提交待处理的更改。为了基本了解该过程,请阅读Using the Session。快速解决方案:
session.commit()
答案 1 :(得分:0)
TIME和TEXT是保留字。
我不知道SQL Alchemy或pymmsql如何与SQL Server对话。本机客户端或ODBC。它最终归结为通过TCP / IP等网络协议的表格数据流(TDS)。
查看TECHNET上的保留字列表。
-- Create table ?
IF OBJECT_ID('DBO.SOMETABLE') IS NULL
CREATE TABLE DBO.SOMETABLE (MY_TEXT VARCHAR(255), MY_TIME DATETIME);
我使用OBJECT_ID函数,因为它输入较少。
但NOT EXITS适用于具有正确WHERE子句的SELECT FROM sys.objects或information_schema.tables。