SQLQL与SQLAlchemy不执行

时间:2013-09-03 21:07:50

标签: python sql-server tsql sqlalchemy pymssql

我正在尝试使用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查询。

谢谢,

2 个答案:

答案 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。