如何在Python中执行纯SQL查询

时间:2018-02-08 15:41:32

标签: python sqlalchemy

我试图在我的SQL数据库中创建一个临时表,然后我想在其中插入数据(来自Pandas DataFrame),并通过此临时表将数据插入到'永久性&# 39;数据库中的表。

到目前为止,我有类似

的内容
""" Database specific... """

import sqlalchemy
from sqlalchemy.sql import text

dsn = 'dsn-sql-acc'
database = "MY_DATABASE"

connection_str =    """
                            Driver={SQL Server Native Client 11.0};
                            Server=%s;
                            Database=%s;
                            Trusted_Connection=yes;
                    """ % (dsn,database)

connection_str_url = urllib.quote_plus(connection_str)
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % connection_str_url, encoding='utf8', echo=True)

# Open connection

db_connection = engine.connect()

sql_create_table = text("""          
                            IF OBJECT_ID('[MY_DATABASE].[SCHEMA_1].[TEMP_TABLE]', 'U') IS NOT NULL
                            DROP TABLE [MY_DATABASE].[SCHEMA_1].[TEMP_TABLE];

                            CREATE TABLE [MY_DATABASE].[SCHEMA_1].[TEMP_TABLE] (
                                [Date] Date,
                                [TYPE_ID] nvarchar(50),
                                [VALUE] nvarchar(50)
                                );


                     """)

db_connection.execute("commit")                  
db_connection.execute(sql_create_table)

db_connection.close()

" raw" sql_create_table中的SQL-snippet在SQL Server中执行时工作正常,但在Python中运行上述内容时,我的数据库中没有任何操作......

这里似乎有什么问题?

稍后我当然想要执行

BULK INSERT [MY_DATABASE].[SCHEMA_1].[TEMP_TABLE]
FROM '//temp_files/temp_file_data.csv'
WITH (FIRSTROW = 2,  FIELDTERMINATOR = ',', ROWTERMINATOR='\n');

在Python中也是......

由于

1 个答案:

答案 0 :(得分:2)

这些陈述无序:

db_connection.execute("commit")                  
db_connection.execute(sql_create_table)

创建表后提交,表将保持不变。