2012-03-08 28 views
3

我運行下面的代碼SQL鍊金術沒有交易開始錯誤

db = create_engine('sqlite:///tracking_test.db') 
db.echo= True 
metadata = MetaData(db) 
session = create_session(bind=db) 
#define tables, if they exist sqlalchemly will find them and sycn otherwise they will be created 
delivered= Table('delivered', metadata, 
    Column('delivered_id',Integer,primary_key=True), 
    Column('domain',String(200)), 
    Column('path',String(500)), 
    ) 

class Delivered(object):   
    def __init__(self,obj): 
     self.domain=u'%s' % obj.get("dm","") 
     self.path=u'%s' % obj.get("pth","") 


report1t = Table('clicked', metadata, 
    Column('clicked_id',Integer,primary_key=True), 
    Column('domain',String(200)), 
    Column('path',String(500)), 

) 

class report1(object): 
    def __init__(self,obj): 
     self.domain=u'%s' % obj.get("dm","") 
     self.path=u'%s' % obj.get("pth","") 


metadata.create_all() 
mapper(report1, report1t) 
mapper(Delivered,delivered) 
result= {}#some dict 
newT = Delivered(result) 
if newT: 
    session.add(newT) 
    session.commit() 
    session.flush() 

而且我得到這個錯誤 sqlalchemy.exc.InvalidRequestError:沒有交易開始。

會話字典說:

{'autocommit': True, 'autoflush': False, 'transaction': None, 'hash_key': 4317750544, 'expire_on_commit': False, '_new': {<sqlalchemy.orm.state.InstanceState object at 0x101a79ad0>: <__main__.adDelivered object at 0x101a799d0>}, 'bind': Engine(sqlite:///adtracking_test.db), '_deleted': {}, '_flushing': False, 'identity_map': {}, 'dispatch': <sqlalchemy.event.SessionEventsDispatch object at 0x101a82f90>, '_enable_transaction_accounting': True, '_identity_cls': <class 'sqlalchemy.orm.identity.WeakInstanceDict'>, 'twophase': False, '_Session__binds': {}, '_query_cls': <class 'sqlalchemy.orm.query.Query'>} 

任何一個知道我在做什麼錯?

感謝, CG

回答

4

如果您發佈完整回溯這將是有益的。但是,我認爲問題在於您創建會話的方式。我認爲你應該使用sessionmaker而不是create_session(我從來沒有見過這個功能,我沒有看到它在任何地方記錄)。 sessionmaker創建一個新的Session類,您需要實例化該類。所以:

Session = sessionmaker(bind=db) 
session = Session() 
... 
session.add(newT) 
+0

這似乎有伎倆,我不知道我在哪裏找到createsession。 – 2012-03-08 18:34:42

+0

謝謝aquavitae :) – 2012-03-08 18:35:04