[Python-es] SQLAlchemy: problema para intentar crear clases con valor de __tablename__ como argumento

Luis Fernando Barrera lfbarrera17 en gmail.com
Jue Sep 27 11:37:01 CEST 2012


Luego tienes que hacer

metadata.create_all()

para crear las tablas.


Espero que te ayude.

2012/9/27 Luis Fernando Barrera <lfbarrera17 en gmail.com>

> ¿No te faltará crear la tabla?
>
> Un codigo de ejemplo.
>
> from sqlalchemy.orm import sessionmaker, relationship, backref
>
> engine = create_engine('sqlite:///:memory:', echo=True)
> metadata = MetaData()
> metadata.bind = engine
> Session = sessionmaker(bind=engine)
>
> from sqlalchemy.ext.declarative import declarative_base
> Base = declarative_base()
> Base.metadata = metadata
>
>
> Luis Fernando Barrera
> lfbarrera17 en gmail.com
>
>
> 2012/9/26 miguel zamora m. <mzmprog en gmail.com>
>
> quiza te sirva un poco de codigo para poder compara y tomar ideas
>>
>> te dejo esta pagina donde en un proyecto que me toco ver en su minuto
>> me ayudo mucho
>>
>> http://nullege.com/
>>
>>
>> http://nullege.com/codes/show/src%40d%40b%40dbcook-HEAD%40trunk%40dbcook%40usage%40example%40example1.py/11/sqlalchemy/python
>>
>>
>> ademas esta doc esta bastante bien
>>
>> http://www.cafepy.com/article/python_attributes_and_methods/
>>
>>
>> http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.pdf
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> El día 26 de septiembre de 2012 10:37, Jose Caballero
>> <jcaballero.hep en gmail.com> escribió:
>> > en esa linea estoy investigando.
>> > Mi problema va un poco mas lejos.
>> > Me gustaria ser capaz de poder gestionar un numero arbitrario de tablas
>> > (todas con el mismo 'schema'). En otras palabras, necesitaria un numero
>> > indefinido de clases, cada una con un nombre diferente (que luego sera,
>> > siguiente ese ejemplo, el nombre de la tabla).
>> > Estoy intentando combinar el ejemplo de la doc usando declared_attr con
>> lo
>> > [poco] que se de factorias de clases.
>> >
>> > Muchas gracias,
>> > Jose
>> >
>> >
>> > El 26 de septiembre de 2012 03:19, Marcos Sánchez Provencio
>> > <rapto en arrakis.es> escribió:
>> >
>> >> Creo que lo que quieres es declared_attr
>> >>
>> >> De la docu, un ejemplo de uso:
>> >>
>> >> from sqlalchemy.ext.declarative import declared_attr
>> >>
>> >> class MyMixin(object):
>> >>
>> >>     @declared_attr
>> >>     def __tablename__(cls):
>> >>         return cls.__name__.lower()
>> >>
>> >>     __table_args__ = {'mysql_engine': 'InnoDB'}
>> >>     __mapper_args__= {'always_refresh': True}
>> >>
>> >>     id =  Column(Integer, primary_key=True)
>> >>
>> >> class MyModel(MyMixin, Base):
>> >>     name = Column(String(1000))
>> >>
>> >>
>> >>
>> >>
>> >> El 25/09/12 16:20, Jose Caballero escribió:
>> >>
>> >> Hola,
>> >>
>> >>
>> >> SQLAlchemy 0.7.8-1
>> >> python 2.4
>> >>
>> >>
>> >> Si hago algo como lo siguiente [1] todo funciona perfectamente. Luego
>> >> puedo crear la tabla en la DB con el nombre "table1", y puedo
>> interaccionar
>> >> con ella.
>> >> Lo que quisiera hacer es que el nombre de la tabla fuese un parametro.
>> >> Pero si hago algo como [2], al intentar usar la clase (para salvar un
>> objeto
>> >> session, por ejemplo) obtengo este mensaje de error [3].
>> >> Estoy intentando investigar por que, pero si alguien mientras tanto me
>> da
>> >> una pista, todo comentario sera bien recibido.
>> >>
>> >>
>> >> Muchas gracias por adelantado.
>> >> Jose
>> >> (perdon por la ausencia de tildes)
>> >>
>> >>
>> >>
>> >>
>> -------------------------------------------------------------------------------------------------------
>> >> [1]
>> >>
>> >>
>> >> Base = declarative_base()
>> >> class Foo(Base):
>> >>     __tablename__ = "table1"
>> >>     id = Column(Integer, primary_key=True)
>> >>     var1 = Column(String)
>> >>     var2 = Column(String)
>> >>
>> >>
>> >>
>> -------------------------------------------------------------------------------------------------------
>> >> [2]
>> >>
>> >> Base = declarative_base()
>> >> def createFoo(tablename):
>> >>     class Bar(Base):
>> >>        __tablename__ = tablename
>> >>        id = Column(Integer, primary_key=True)
>> >>        var1 = Column(String)
>> >>        var2 = Column(String)
>> >>     return Bar
>> >>
>> >>
>> >> Foo = createFoo('table1')
>> >>
>> >>
>> >>
>> -------------------------------------------------------------------------------------------------------
>> >> [3]
>> >>
>> >> sqlalchemy.exc.OperationalError: (OperationalError) no such table:
>> table1
>> >> u'INSERT INTO table1 (var1, var2) VALUES (?, ?)' ('blah', 'blah')
>> >>
>> >>
>> >>
>> >>
>> >> _______________________________________________
>> >> Python-es mailing list
>> >> Python-es en python.org
>> >> http://mail.python.org/mailman/listinfo/python-es
>> >> FAQ: http://python-es-faq.wikidot.com/
>> >>
>> >>
>> >>
>> >> _______________________________________________
>> >> Python-es mailing list
>> >> Python-es en python.org
>> >> http://mail.python.org/mailman/listinfo/python-es
>> >> FAQ: http://python-es-faq.wikidot.com/
>> >>
>> >
>> >
>> > _______________________________________________
>> > Python-es mailing list
>> > Python-es en python.org
>> > http://mail.python.org/mailman/listinfo/python-es
>> > FAQ: http://python-es-faq.wikidot.com/
>> >
>>
>>
>>
>> --
>> Miguel Zamora M.
>> Programador en Computacion e Informatica
>> 08-1351249
>> mzmprog en gmail.com
>> Santiago-Chile
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20120927/be17efc5/attachment.html>


Más información sobre la lista de distribución Python-es