2010-01-12 16 views
10

मैं ट्यूटोरियलएसक्यूएल कीमिया क्या गलत है?

http://www.rmunn.com/sqlalchemy-tutorial/tutorial.html

जब मैं त्रुटि संदेश

The debugged program raised the exception unhandled NameError 
"name 'BoundMetaData' is not defined" 

मैं नवीनतम SQLAlchemy का उपयोग कर रहा हूँ मिल गया संकलन मिला है।

मैं इसे कैसे ठीक कर सकता हूं?

इस मैं नवीनतम संस्करण SQLAlchemy के लिए अपने ही करने के लिए संशोधित पढ़ लेने के बाद:

from sqlalchemy import * 
engine = create_engine('mysql://root:[email protected]/mysql') 
metadata = MetaData() 
users = Table('users', metadata, 
    Column('user_id', Integer, primary_key=True), 
    Column('name', String(40)), 
    Column('age', Integer), 
    Column('password', String), 
) 
metadata.create_all(engine) 
i = users.insert() 
i.execute(name='Mary', age=30, password='secret') 
i.execute({'name': 'John', 'age': 42}, 
      {'name': 'Susan', 'age': 57}, 
      {'name': 'Carl', 'age': 33}) 
s = users.select() 
rs = s.execute() 
row = rs.fetchone() 
print 'Id:', row[0] 
print 'Name:', row['name'] 
print 'Age:', row.age 
print 'Password:', row[users.c.password] 
for row in rs: 
    print row.name, 'is', row.age, 'years old 

यह त्रुटि बढ़ा

raise exc.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect) 
sqlalchemy.exc.ProgrammingError: (ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' \n\tPRIMARY KEY (user_id)\n)' at line 5") '\nCREATE TABLE users (\n\tuser_id INTEGER NOT NULL AUTO_INCREMENT, \n\tname VARCHAR(40), \n\tage INTEGER, \n\tpassword VARCHAR, \n\tPRIMARY KEY (user_id)\n)\n\n'() 

उत्तर

16

इस ट्यूटोरियल SQLAlchemy संस्करण 0.2 के लिए है। चूंकि वास्तविक संस्करण 0.5.7 है, मैं कहूंगा कि ट्यूटोरियल गंभीर रूप से पुराना है।

इसके बजाय official एक का प्रयास करें।


संपादित करें:

अब आप एक पूरी तरह से अलग सवाल है। आपको इसे संपादित करने के बजाय एक और सवाल पूछना चाहिए था।

आपकी समस्या अब है कि

Column('password', String), 

स्तंभ के लिए आकार निर्दिष्ट नहीं करता है।

Column('password', String(20)), 

इसके बजाय का प्रयास करें।

+2

@ नोस्क्लो। बहुत धन्यवाद। यह वही है जो मैं चाहता हूं। – kn3l

+1

वह "आधिकारिक" लिंक टूटा हुआ है – dlchambers

+0

मुझे लगता है कि यह इस समय आधिकारिक लिंक है: http://docs.sqlalchemy.org/en/latest/orm/tutorial.html –

2

मुझे विश्वास है कि आपको अपने password फ़ील्ड की लंबाई निर्दिष्ट करने की आवश्यकता है।

Column('password', String(100)) 

MySQL असंबद्ध वर्चर्स कॉलम की अनुमति नहीं देता है। यदि आपको इसकी आवश्यकता है, तो इसके बजाय sqlalchemy डेटाटाइप Text का उपयोग करें।

+0

yes.it काम करता है..बहुत कोड कोड कोड:) – kn3l

21

ट्यूटोरियल के लिए फिक्स BoundMetaData के बजाय MetaData का उपयोग करना है। BoundMetaData को हटा दिया गया है और मेटाडेटा के साथ प्रतिस्थापित किया गया है।

और भविष्य में ऐसी त्रुटि प्राप्त करने से बचने के लिए, official एक के बजाय Nosklo के रूप में प्रयास करें।

from sqlalchemy import * 

db = create_engine('sqlite:///tutorial.db') 

db.echo = False # Try changing this to True and see what happens 

metadata = MetaData(db) 

""" 
    Continue with the rest of your Python code 
""" 
संबंधित मुद्दे