2017-02-13 5 views
0

Я хочу удалить некоторые данные из тестовой таблицы. Но даже после того, как следующий this documentation, я не уверен, что я делаю неправильно .: сообщениеудаление записей из таблицы с помощью SQLAlchemy

hostname = 'localhost' 
db_name = 'xx' 
db_port = 'xx' 
login = 'xx' 
pwd = 'xx' 

con_string = 'mysql+mysqlconnector://{login}:{passwd}@{hostname}:{port}/{db}' 
engine_str = con_string.format(
    login=login, passwd=pwd, hostname=hostname, port=db_port, db=db_name 
) 

try: 
    engine = sqlalchemy.create_engine(engine_str, echo=False) 
    session = sessionmaker(bind=engine) 
    connection = engine.connect() 
    session = session(bind=connection) 
    Base = declarative_base() 

except exc.SQLAlchemyError: 
    raise 


t_packages = Table('test_table', Base.metadata, autoload_with=engine) 
session.query(t_packages).filter_by(environment='sandbox').delete() 

ошибка:

line 119, in delete_package_reference_by_env 
    session.query(t_packages).filter_by(environment=environment).delete() 
    File "C:\Python27\lib\site-packages\sqlalchemy\orm\query.py", line 3155, in delete 
    delete_op.exec_() 
    File "C:\Python27\lib\site-packages\sqlalchemy\orm\persistence.py", line 1167, in exec_ 
    self._do_pre_synchronize() 
    File "C:\Python27\lib\site-packages\sqlalchemy\orm\persistence.py", line 1221, in _do_pre_synchronize 
    target_cls = query._mapper_zero().class_ 
AttributeError: 'NoneType' object has no attribute 'class_' 
+0

Очень родственный: http://stackoverflow.com/questions/9882358/how-to-delete-rows-from-a-table-using-an-sqlalchemy-q uery-without-orm –

+0

@ IljaEverilä Я пробовал это решение, но оно не сработало. Он возвращал: sqlalchemy.exc.UnboundExecutionError: этот None не связан напрямую с соединением или движком. Используйте метод .execute() соединение или двигатель для выполнения этой конструкции. –

ответ

0

Solution found on this post

Я должен был использовать:

d = t_packages.delete(t_packages.c.environment == 'sandbox') 
with engine.connect() as conn: 
    conn.execute(d) 
Смежные вопросы