Re: [Python-es] SQLAlchemy: problema para intentar crear clases con valor de __tablename__ como argumento
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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] SQLAlchemy: problema para intentar crear clases con valor de __tablename__ como argumento
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 < ra...@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 > listPython-es@python.orghttp://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > > > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Problema con smtplib y bcc
> name = name.lower() > AttributeError: 'tuple' object has no attribute 'lower' > > Al parecer name es una tupla (creo que tu lo llamas tulupa por alguna razon), pero tu crees que es un string. Suerte, Jose (perdon por la ausencia de tildes) ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Problema con smtplib y bcc
Gracias jose por la velocidad de respuesta, pero si ves el error que me marcas esta en una libreria de python, y esto se soluciona cunando saco el envio al bcc. pd: estas perdonado por la ausencia de tildes, yo tampoco las tengo, el teclado en inlges es mas comodo. Saludos. El 26 de septiembre de 2012 14:25, Jose Caballero escribió: > > name = name.lower() >> AttributeError: 'tuple' object has no attribute 'lower' >> >> > > Al parecer name es una tupla (creo que tu lo llamas tulupa por alguna > razon), pero tu crees que es un string. > > > Suerte, > Jose > (perdon por la ausencia de tildes) > > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Problema con smtplib y bcc
parece indicar que name si es un string en un caso, y no en el otro. El 26 de septiembre de 2012 13:31, Nicolas lino escribió: > Gracias jose por la velocidad de respuesta, pero si ves el error que me > marcas esta en una libreria de python, y esto se soluciona cunando saco el > envio al bcc. > > pd: estas perdonado por la ausencia de tildes, yo tampoco las tengo, el > teclado en inlges es mas comodo. > > Saludos. > > El 26 de septiembre de 2012 14:25, Jose Caballero < > jcaballero@gmail.com> escribió: > >> >> name = name.lower() >>> AttributeError: 'tuple' object has no attribute 'lower' >>> >>> >> >> Al parecer name es una tupla (creo que tu lo llamas tulupa por alguna >> razon), pero tu crees que es un string. >> >> >> Suerte, >> Jose >> (perdon por la ausencia de tildes) >> >> ___ >> Python-es mailing list >> Python-es@python.org >> http://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Problema con smtplib y bcc
A ver si esto te ayuda: >>> from email.mime.multipart import MIMEMultipart >>> msg = MIMEMultipart() >>> msg['To'] = 'lalala' >>> p = msg['To','lololo'] Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/email/message.py", line 294, in __getitem__ return self.get(name) File "/usr/lib/python2.7/email/message.py", line 360, in get name = name.lower() AttributeError: 'tuple' object has no attribute 'lower' >>> Ese msg['To', bcc] que haces en smtpserver.sendmail(msg['From'], msg['To', bcc], msg.as_string()) no es correcto... no he usado esto nunca, pero quizás si creas un array con las dos direcciones funcione. Igual esto también te sirve: http://stackoverflow.com/questions/1546367/python-how-to-send-mail-with-to-cc-and-bcc Un saludo. De: Nicolas lino Para: python-es@python.org Enviado: Miércoles 26 de septiembre de 2012 19:18 Asunto: [Python-es] Problema con smtplib y bcc Hola, estoy trabajando con un spammer para mi empresa, que manda las facturas automaticamente, como necesitaria una copia de todos los mails enviados se me ocurrio enviar con una copia bcc. Pero no hay forma de hacerlo solucionar. El codigo si no incluyo el bcc funciona barbaro, busque bastante info, y lo que esta dando vueltas en internet dice que lo aga de esta manera. bcc = 'nl...@itcom.com.ar' x = 0 TXT = cfg.get('msg','texto') for x in rows: TUPULA = (x) TO = TUPULA[1] TO1 = TUPULA[2] TO2 = TUPULA[3] TO3 = TUPULA[4] TO4 = TUPULA[5] TO5 = TUPULA[6] CL = TUPULA[0] CLI = ("^%s\s-*" % (CL)) for X in MATCH: if re.match(CLI, X): FAC = X if FAC != "": msg = MIMEMultipart() msg['Subject'] = cfg.get('msg','subject') msg['From'] = cfg.get('msg','from') msg['To'] = TO msg.preamble = 'Multipart massage.\n' part = MIMEText("%s" % (TXT)) msg.attach(part) part = MIMEApplication(open(MT+""+FAC ,"rb").read()) part.add_header('Content-Disposition', 'attachment', filename="%s" % (FAC)) msg.attach(part) smtpserver.sendmail(msg['From'], msg['To', bcc], msg.as_string()) ## si saco el bcc funciona. Pero necesito las copias. print 'done! Envio a %s' % (TO) El error es: Conexion con mysql establecida Cursor mysql creado Conexion con server SMTP establecida listado de facturas ok Traceback (most recent call last): File "menuviejo.py", line 31, in mailcompleto.ENV() File "/home/oka/mailcompleto.py", line 89, in ENV smtpserver.sendmail(msg['From'], msg['To',bcc], msg.as_string()) File "/usr/lib/python2.6/email/message.py", line 292, in __getitem__ return self.get(name) File "/usr/lib/python2.6/email/message.py", line 358, in get name = name.lower() AttributeError: 'tuple' object has no attribute 'lower' menuviejo.py es un mini menu de pruebas que estoy usando, mailcompleto.py es todo el modulo de envio de mails. ENV es el nombre de la funcion de envio de mails. Gracias y saludos. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] SQLAlchemy: problema para intentar crear clases con valor de __tablename__ como argumento
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 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 > 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@python.org >> http://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> >> >> ___ >> Python-es mailing list >> Python-es@python.org >> http://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> > > > ___ > Python-es mailing list > Python-es@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 mzmp...@gmail.com Santiago-Chile ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/