Puedo consultar e insertar datos con éxito usando sqlalchemy y pandas:
from sqlalchemy import create_engine import pandas as pd engine = create_engine('mssql://myserver/mydb?driver=SQL+Server+Native+Client+11.0?trusted_connection=yes')Leer tabla temporal:
sql_command = """ select top 100 * from tempy """ df = pd.read_sql(sql_command, engine) print df tempID tempValue 0 1 2Adjuntar nuevos datos:
df_append = pd.DataFrame( [[4,6]] , columns=['tempID','tempValue']) df_append.to_sql(name='tempy', con=engine, if_exists = 'append', index=False) df = pd.read_sql(sql_command, engine) print df tempID tempValue 0 1 2 1 4 6Intenta truncar los datos:
connection = engine.connect() connection.execute( '''TRUNCATE TABLE tempy''' ) connection.close()Lea la tabla nuevamente, pero falló el truncamiento:
df = pd.read_sql(sql_command, engine) print df tempID tempValue 0 1 2 1 4 6Tengo el mismo problema con pandas 0.19.2 y sqlalchemy 1.1.5 .
Como veo, la confirmación automática no se fuerza en autocommit engine.execute() cuando se ejecuta una instrucción TRUNCATE . Si lo fuerzo manualmente, TRUNCATE funciona perfectamente:
from sqlalchemy.sql import text as sa_text engine.execute(sa_text('''TRUNCATE TABLE tempy''').execution_options(autocommit=True)) Es elegante que DROP funcione perfectamente sin forzar la autocommit ...
Esto funcionó para mí:
from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() session.execute('''TRUNCATE TABLE tempy''') session.commit() session.close()Aquí hay una solución completa basada en la pregunta, al usar sqlalchemy 1.1.15 en Windows, recibí errores al intentar implementar las otras soluciones:
import sqlalchemy engine = sqlalchemy.create_engine('mssql://myserver/mydb?driver=SQL+Server+Native+Client+11.0?trusted_connection=yes') connection = engine.connect() truncate_query = sqlalchemy.text("TRUNCATE TABLE tempy") connection.execution_options(autocommit=True).execute(truncate_query)