2010-01-12 40 views
10

tôi đã hướng dẫnSql Alchemy Có gì sai?

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

Khi tôi biên dịch đã được thông báo lỗi

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

Tôi sử dụng SQLAlchemy mới nhất.

Làm cách nào để khắc phục sự cố này?

Sau khi đọc tôi này được sửa đổi để riêng tôi cho phiên bản mới nhất 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 

Nó nâng lỗi

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

Trả lời

16

Hướng dẫn này là dành cho SQLAlchemy phiên bản 0.2. Kể từ phiên bản thực tế là 0,5,7, tôi muốn nói rằng hướng dẫn này đã lỗi thời nghiêm trọng.

Hãy thử thay vào đó hãy thử số official.


EDIT:

Bây giờ bạn có một câu hỏi hoàn toàn khác nhau. Bạn nên hỏi một câu hỏi khác thay vì chỉnh sửa câu hỏi này.

Vấn đề của bạn bây giờ là

Column('password', String), 

Không chỉ định kích thước cho cột.

Hãy thử

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

Thay vào đó.

+2

@Nosklo. Cảm ơn rất nhiều. Đó là những gì tôi muốn. – kn3l

+1

Liên kết "chính thức" đó bị hỏng – dlchambers

+0

Tôi nghĩ đây là liên kết chính thức tại thời điểm này: http://docs.sqlalchemy.org/en/latest/orm/tutorial.html –

2

Tôi tin rằng bạn cần chỉ định độ dài của trường password.

Column('password', String(100)) 

MySQL không cho phép cột chênh lệch không bị chặn. Nếu bạn cần, hãy sử dụng kiểu dữ liệu sqlalchemy Text.

+0

yes.it works..thanks alots codeape:) – kn3l

21

Sửa chữa cho hướng dẫn này là chỉ sử dụng MetaData thay vì BoundMetaData. BoundMetaData không được chấp nhận và được thay thế bằng MetaData.

Và để tránh bị lỗi như vậy trong tương lai, hãy thử thay vào đó, hãy thử số official thay thế, là 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 
""" 
Các vấn đề liên quan