2012-02-26 11 views
12

काम नहीं कर रहा है sqlalchemy tutorial में दिए गए उदाहरण के माध्यम से मैं अपना रास्ता काम करने की कोशिश कर रहा हूं लेकिन मुझे त्रुटियां मिल रही हैं। जहां तक ​​मैं कह सकता हूं कि मैं पत्र के उदाहरण का पालन कर रहा हूं। यहां कोड है जो मेरे पास अब तक है। जब मैं डीबी से पूछता हूं तो यह .first() में विफल रहता है।sqlalchemy ट्यूटोरियल उदाहरण

मैं संस्करण 0.7.5 और अजगर पर हूँ 2,7

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

engine = create_engine('sqlite:///:memory:', echo=True) 
engine.execute("select 1").scalar() # works fine 

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

class User(Base): 
    __tablename__ = 'users' 

    id = Column(Integer, primary_key=True) 
    name = Column(String) 
    fullname = Column(String) 
    password = Column(String) 

    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) 

jeff_user = User("jeff", "Jeff", "foo") 
session.add(jeff_user) 

our_user = session.query(User).filter_by(name='jeff').first() # fails here 

jeff_user.password = "foobar" 

session.add_all([ 
       User('wendy', 'Wendy Williams', 'foobar'), 
       User('mary', 'Mary Contrary', 'xxg527'), 
       User('fred', 'Fred Flinstone', 'blah')]) 

session.dirty # shows nothing as dirty 
session.new # shows nothing as new 

त्रुटि संदेश

2012-02-25 17:48:33,879 INFO sqlalchemy.engine.base.Engine BEGIN (implicit) 
2012-02-25 17:48:33,886 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, password) VALUES (?, ?, ?) 
2012-02-25 17:48:33,886 INFO sqlalchemy.engine.base.Engine ('jeff', 'Jeff', 'foo') 
2012-02-25 17:48:33,887 INFO sqlalchemy.engine.base.Engine ROLLBACK 
Traceback (most recent call last): 
    File "learning_sql.py", line 35, in <module> 
    our_user = session.query(User).filter_by(name='ed').first() # fails here 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2024, in first 
    ret = list(self[0:1]) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 1918, in __getitem__ 
    return list(res) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2092, in __iter__ 
    self.session._autoflush() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 983, in _autoflush 
    self.flush() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1559, in flush 
    self._flush(objects) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1630, in _flush 
    flush_context.execute() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 331, in execute 
    rec.execute(self) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 475, in execute 
    uow 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 2291, in _save_obj 
    execute(statement, params) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1405, in execute 
    params) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1538, in _execute_clauseelement 
    compiled_sql, distilled_params 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1646, in _execute_context 
    context) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1639, in _execute_context 
    context) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 330, in do_execute 
    cursor.execute(statement, parameters) 
sqlalchemy.exc.OperationalError: (OperationalError) no such table: users u'INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)' ('jeff', 'Jeff', 'foo') 

उम्मीद प्रिंट आउट है इस

>>> our_user = session.query(User).filter_by(name='ed').first() 
BEGIN (implicit) 
INSERT INTO users (name, fullname, password) VALUES (?, ?, ?) 
('ed', 'Ed Jones', 'edspassword') 
SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password 
FROM users 
WHERE users.name = ? 
LIMIT 1 OFFSET 0 
('ed',) 
>>> our_user 
<User('ed','Ed Jones', 'edspassword')> 

किसी कारण से है मेरा कोड रोलबैक कर रहा है जब इसे चुनना चाहिए।

+2

[आधिकारिक ORM ट्यूटोरियल के बाद और मैं एक त्रुटि में चल रहा हूँ] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/6710278/निम्नलिखित-द-आधिकारिक-ओआरएम-ट्यूटोरियल-और-im-running-in-an-error) –

उत्तर

24

क्योंकि डेटाबेस तालिका संरचना याद आ रही है तो आपको यह त्रुटि हो रही है (यदि आप जाहिरा तौर पर ट्यूटोरियल में इस लाइन याद किया, यह प्रचार मानचित्रण उपधारा में है)। बस अपनी मेज/मॉडल परिभाषाओं के बाद निम्नलिखित जोड़कर स्कीमा बनाएँ:

Class User(Base) 
    ... 

# Initialize database schema (create tables) 
Base.metadata.create_all(engine) 
+2

अपना उत्तर बढ़ाने के लिए, मेरे मामले में मैं एक और आधार बना रहा था, लेकिन चूंकि यह वर्ग 'Base = declarative_base() से आता है 'आपको अपनी ऑब्जेक्ट के लिए विस्तारित उसी बेस के साथ create_all को कॉल करने की आवश्यकता है – AsTeR

संबंधित मुद्दे