2010-01-12 15 views
10

Ben öğreticiSql Alchemy Sorununuz nedir?

Ben hata mesajı

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

Ben son sqlalchemy kullanmak duyuyorum var Derleyen

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

aldık.

Bunu nasıl düzeltebilirim?

son sürümü sqlalchemy için kendi modifiye bu I okuduktan sonra:

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 

O Bu eğitimde SQLAlchemy sürümü 0.2 içindir hatayı

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'() 

cevap

16

yükseltmek. Gerçek sürüm 0.5.7 olduğundan, öğreticinin ciddi şekilde modası geçmiş olduğunu söyleyebilirim.

Bunun yerine official deneyin.


DÜZENLEME:

Şimdi tamamen farklı bir sorum var. Bunu düzeltmek yerine başka bir soru sormalısın.

Senin sorunun artık

Column('password', String), 

sütun için bir boyut belirtin yapmaz olmasıdır.

yerine

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

deneyin.

+2

@Nosklo. Çok teşekkürler. İstediğim şey budur. – kn3l

+1

Bu "resmi" bağlantı bozuk – dlchambers

+0

Şu anda bu resmi bağlantı olduğunu düşünüyorum: http://docs.sqlalchemy.org/en/latest/orm/tutorial.html –

2

password alanınızın uzunluğunu belirtmeniz gerektiğini düşünüyorum.

Column('password', String(100)) 

MySQL, sınırsız varchar sütunlarına izin vermez. Buna ihtiyacınız varsa, bunun yerine sqlalchemy veri türü Text'u kullanın.

+0

yes.it çalışır .. çok codeape teşekkürler:) – kn3l

21

Öğreticinin düzeltmesi, BoundMetaData yerine MetaData kullanmaktır. BoundMetaData onaylanmaz ve MetaData ile değiştirilir.

Gelecekte bu tür bir hata oluşmasını önlemek için, official değerini deneyin, Nosklo olarak belirtin.

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 
""" 
İlgili konular