kn3*_*n3l 12 python mysql sqlalchemy
我得到了教程
当我编译得到错误消息
The debugged program raised the exception unhandled NameError
"name 'BoundMetaData' is not defined"
Run Code Online (Sandbox Code Playgroud)
我使用的是最新的sqlAlchemy.
我怎么能修好这个?
阅读本文后,我修改了自己的最新版本sqlAlchemy:
from sqlalchemy import *
engine = create_engine('mysql://root:mypassword@localhost/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
Run Code Online (Sandbox Code Playgroud)
它会引发错误
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' ()
Run Code Online (Sandbox Code Playgroud)
sha*_*ovo 24
本教程的修复方法是使用MetaData而不是 BoundMetaData.不推荐使用BoundMetaData并将其替换为MetaData.
而在将来避免这样得到错误,请尝试官方的一个替代,如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
"""
Run Code Online (Sandbox Code Playgroud)
nos*_*klo 18
本教程适用于SQLAlchemy版本0.2.由于实际版本是0.5.7,我会说教程严重过时.
试试官方的.
编辑:
现在你有一个完全不同的问题.你应该问另一个问题而不是编辑这个问题.
你现在的问题是
Column('password', String),
Run Code Online (Sandbox Code Playgroud)
不指定列的大小.
尝试
Column('password', String(20)),
Run Code Online (Sandbox Code Playgroud)
代替.
| 归档时间: |
|
| 查看次数: |
18723 次 |
| 最近记录: |