2012-12-14 6 views
7

Kod, sqlacmey'in orm tutorial numaralı son satırından, son satır hariç, sorgudan sonra tüm tabloları bırakmayı amaçladığım bir adım adım kopyasıdır. ,SQLAlchemy tabloları bırakarak engelleniyor

workbench admin

belirgin çizgi gösterildiği gibi, damla tabloda işlem table metadata lock nedeniyle asılan Ama Base.metadata.drop_all(bind=engine) bloke programı aşağıda (MySQL WorkBench'den alınmıştır) o zaman MySQL durumunu olan Meta satırı kilidinin result = session.query(User).all() tarafından yapılmasını öneririm çünkü program bu satırın kaldırılması durumunda engellenmemiş, ama nedenini hala bilmiyorum. Benim soru edilir: Neden hedefim bu() veya (işlemek, veya geri alma()) engelleme

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy import Column, Integer, String 


Base = declarative_base() 


class User(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(16)) 
    fullname = Column(String(16)) 
    password = Column(String(16)) 

    def __init__(self, name, fullname, password): 
     self.name = name 
     self.fullname = fullname 
     self.password = password 

    def __repr__(self): 
     return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password) 


uri = 'mysql://root:[email protected]/test_sa' 
engine = create_engine(uri, echo=False) 

Base.metadata.create_all(engine) 

Session = sessionmaker(bind=engine) 
session = Session() 

user = User('ed', 'Ed Jones', 'edspassword') 
session.add(user) 
session.commit() 

result = session.query(User).all() 
print len(result) 

Base.metadata.drop_all(bind=engine) 

cevap

14

çağrı session.close() nasıl önlenebileceği olur sen drop_all yapmadan önce(). oturum hala açık bir işlemde oturuyor.

öğretici agresif tablo kilitleme yok sqlite aykırıdır (Ben senin MySQL DB burada InnoDB kullanıyor varsayarak).

+0

Teşekkürler, anladım! Karşılaştığım şeyi açıklayan [bu sayfa] (http://dev.mysql.com/doc/refman/5.5/en/metadata-locking.html) var mı? – Reorx

+0

yep (15 karakter doldurarak) – zzzeek