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

2012-09-26 Por tema Marcos Sánchez Provencio

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

2012-09-26 Por tema Jose Caballero
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

2012-09-26 Por tema Jose Caballero
> 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

2012-09-26 Por tema Nicolas lino
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

2012-09-26 Por tema Jose Caballero
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

2012-09-26 Por tema Luis Garcia Merino
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

2012-09-26 Por tema miguel zamora m.
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/