Tengo el tutorial

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

Al compilar el mensaje de error

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

Yo soy el uso de la última sqlAlchemy .

¿Cómo Podría arreglado esto?

Después de leer esto he modificado a mi propio última versión de 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

Es elevar error

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

OriginalEl autor kn3l | 2010-01-12

3 Comentarios

  1. 17

    Este tutorial es para SQLAlchemy versión 0.2. Ya que la actual es la versión 0.5.7, yo diría que el tutorial está gravemente anticuado.

    Probar el oficial uno en su lugar.


    EDICIÓN:

    Ahora usted tiene una completamente diferente de la pregunta. Usted debería haber pedido otra pregunta en lugar de la edición de este uno.

    Tu problema ahora es que

    Column('password', String),

    No especifica un tamaño de la columna.

    Intentar

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

    Lugar.

    Que la «oficial» enlace está roto
    Creo que este es el enlace oficial en el momento: docs.sqlalchemy.org/en/latest/orm/tutorial.html

    OriginalEl autor nosklo

  2. 22

    La corrección para el tutorial es solo usar MetaData en lugar de BoundMetaData. BoundMetaData es obsoleto y se sustituye con Metadatos.

    Y para evitar esos errores en el futuro, Trate el oficial uno en su lugar,
    como Nosklo dijo.

    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
    """

    OriginalEl autor shashaDenovo

  3. 2

    Creo que usted necesita para especificar la longitud de su password campo.

    Column('password', String(100))

    MySQL no permite ilimitado columnas varchar. Si usted necesita, use el sqlalchemy tipo de datos Texto lugar.

    sí.funciona..gracias se adhiere codeape 🙂

    OriginalEl autor codeape

Dejar respuesta

Please enter your comment!
Please enter your name here