Hola Eduardo,
2016-04-15 22:35 GMT+02:00 Eduardo862005 eduardo862005 <
[email protected]>:
> Tengo un problema que no pasa en ot6ros lenguajes con consultas sobre el
> motor.
> el entorno es: Python con Tryton y motor PostgreSQL
> la consulta la hago en una pantalla con salida a un informe:
>
> class InvoicesRangeReport(Report):
> __name__ = 'invoices_range_report'
>
> @classmethod
> def parse(cls, report, objects, data, localcontext):
>
> consulta1()
> consulta2()
> consulta3()
>
> def consulta1():
> cursor = Transaction().cursor
> cursor.execute("DROP TABLE mivista3")
>
> def consulta2():
> query = """CREATE TABLE mivista3 AS
> SELECT a.number AS factu,a.invoice_date,e.name AS osoc,
> e.alias AS descrip,d.product,d.servicio, 0000 AS cant,
> d.monto AS valor,d.id,d.invoice_line,000000 AS total,
> 000000 AS totfc,d.prefactura
> FROM account_invoice a
> INNER JOIN alpi_prefactura c ON a.id=c.invoice
> INNER JOIN alpi_prefactura_line d ON c.id=d.prefactura
> INNER JOIN party_party e ON a.party=e.id
> WHERE invoice_date >= '%s' AND invoice_date >= '%s' AND
> d.invoice_line >0
> ORDER BY product,monto"""% (str(data['desde']),
> str(data['hasta']))
> cursor = Transaction().cursor
> cursor.execute(query)
>
> def consulta3():
> query = """SELECT factu, invoice_date AS fecha, osoc, descrip,
> servicio,COUNT(product) AS
> canti,valor,COUNT(product)*valor AS totfc,
> product
> FROM mivista3
> GROUP BY factu,invoice_date,osoc,descrip,
> servicio,valor,product
> ORDER BY product"""
> cursor = Transaction().cursor
> cursor.execute(query)
>
> lista = cursor.fetchone()
>
> localcontext['account_invoices'] = lista
> return super(InvoicesRangeReport, cls).parse(report, objects,
> data, localcontext)
>
> por lo que se ve la sintaxis esta correcta, pero no puede crear una tabla,
> para mi es inexplicable
> deberia haber una manera de generar un cursor, cosa que no encuentro en
> Postgresql.
> QUE ME RECOMIENDAN.. GRACIAS
>
No es necesario crear la tabla físicamente en PostgreSQL para realizar la
consulta; puedes hacerlo mediante el método table_query() de la clase
ModelSQL [1]. Puedes buscar ejemplos en los módulos oficiales, esto te
permite ejecutar una consulta contra la base de datos cada vez que hagas
una llamada al modelo en cuestión. Pero si por el motivo que fuese,
quisieses crear la tabla, deberías hacerlo dentro del método __register__()
[2]. El módulo product_quantity_by_location [3] puede ser una guia que te
ayude a hacerlo.
Saludos,
[1]
http://doc.tryton.org/3.8/trytond/doc/ref/models/models.html#trytond.model.ModelSQL.table_query
[2]
http://doc.tryton.org/3.8/trytond/doc/ref/models/models.html?highlight=register#trytond.model.Model.__register__
[3] https://bitbucket.org/zikzakmedia/trytond-product_quantity_by_location
>
> eduardo martinez
>
>
--
Jesús Martín
Zikzakmedia SL
C/ de Sant Jaume, 9, baixos, 2ª
08720 Vilafranca del Penedès
☏ 93 890 21 08