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

miguel zamora m. mzmprog en gmail.com
Jue Sep 27 01:45:47 CEST 2012


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


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