2010-01-12 6 views
10

나는 튜토리얼Sql Alchemy 무엇이 잘못 되었나요?

나는 오류 메시지

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

나는 최신 SQLAlchemy의를 사용 오전있어 컴파일 할

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

을 얻었다.

어떻게 해결할 수 있습니까?

최신 버전 SQLAlchemy의 내 자신에 수정이 I를 읽은 후 :

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 

은이 튜토리얼은 SQLAlchemy의 버전 0.2을위한 오류를

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

을 올립니다. 실제 버전이 0.5.7이므로이 튜토리얼은 심각하게 구식이라고합니다.

대신 official을 사용해보십시오.


편집 :

이제 완전히 다른 질문이 있습니다. 이 질문을 편집하는 대신 다른 질문을해야합니다.

귀하의 문제는 이제

Column('password', String), 

컬럼의 크기를 지정하지 않는다는 것입니다.

대신

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

보십시오.

+2

.Nosklo. 대단히 감사합니다. 내가 원하는 것입니다. – kn3l

+1

그 "공식적인"링크가 깨졌습니다 – dlchambers

+0

이것은 현재 공식 링크라고 생각합니다 : http://docs.sqlalchemy.org/en/latest/orm/tutorial.html –

2

password 필드의 길이를 지정해야한다고 생각합니다.

Column('password', String(100)) 

MySQL은 묶지 않은 varchar 열을 허용하지 않습니다. 필요한 경우 대신 sqlalchemy 데이터 유형 Text을 사용하십시오.

+0

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

21

튜토리얼의 수정은 BoundMetaData 대신 MetaData을 사용하는 것입니다. BoundMetaData는 더 이상 사용되지 않으며 MetaData로 대체되었습니다.

나중에 이러한 오류가 발생하지 않도록하려면 을 Nosklo으로 변경하여 official을 사용해보십시오.

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 
""" 
관련 문제