I have the following mysql query.
SELECT purchase.DATE, products.ID, products.NAME, purchase_details.UNITS, purchase.REFERENCE, purchase_details.PRICE,purchase.ID_PROVIDER
FROM purchase INNER JOIN (products INNER JOIN purchase_details ON products.ID = purchase_details.ID_PRODUCT) ON purchase.ID = purchase_details.ID_PURCHASE
WHERE (((purchase.DATE)>='2016-09-01 00:00:00' And (purchase.DATE)<='2016-09-28 23:59:59'))
order by purchase.date,products.NAME,purchase.reference
INTO OUTFILE
'/tmp/ventas_descuento.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n';
Which I occupy in a python code to connect to a database and extract the data in a csv, but I want the user to enter the initial and final date and based on these parameters obtain the data. My python code is as follows:
import MySQLdb
import os
import os.path
import time
if os.path.exists("c:\tmp\"):
print("ok,existe carpeta")
try:
os.system("del /F c:\tmp\reporte_compras.csv")
except:
pass
else:
os.mkdir("c:\tmp")
bd = MySQLdb.connect("localhost","root","1234","puntoventa",port=3306)
cursor = bd.cursor()
query="""SELECT purchase.DATE, products.ID, products.NAME, purchase_details.UNITS, purchase.REFERENCE, purchase_details.PRICE,purchase.ID_PROVIDER
FROM purchase INNER JOIN (products INNER JOIN purchase_details ON products.ID = purchase_details.ID_PRODUCT) ON purchase.ID = purchase_details.ID_PURCHASE
WHERE (((purchase.DATE)>='2016-09-01 00:00:00' And (purchase.DATE)<='2016-09-28 23:59:59'))
order by purchase.date,products.NAME,purchase.reference
INTO OUTFILE
'/tmp/ventas_descuento.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n';"""
try:
cursor.execute(query)
except:
print "Error: No se pudo obtener la data"
bd.close()
os.system('cls')
archivo = open("c:/tmp/reporte_compras.csv","r")
lista= archivo.read()
archivo.close()
#Pongo encabezados
lista2="FECHA,CODIGO,PRODUCTO,UNIDADES,FACTURA,PRECIOCOMPRA,PROVEEDOR \n"
lista3=lista2 + lista
archivo = open("c:/tmp/reporte_compras.csv","w")
archivo.write(lista3)
archivo.close()
print "Listo reporte de ventas por producto incluyendo descuento exportado a c:/tmp/reporte_compras.csv"
os.system('pause')
os.system("explorer c:\tmp\")
I already tried concatenating with string variables line by line in the construction of the query, but it did not work, the following code is the one used to build the query with the dates given by the user.
cadena="SELECT tickets.TICKETID, receipts.DATENEW, products.NAME, products.PRICESELL, payments.PAYMENT, ticketlines.PRICE, products.pricesell-ticketlines.price,(products.pricesell-ticketlines.price)/products.pricesell"
separador="\n"
cadena2="FROM taxes INNER JOIN ((((receipts INNER JOIN tickets ON receipts.ID = tickets.ID) INNER JOIN (products INNER JOIN ticketlines ON products.ID = ticketlines.PRODUCT) ON receipts.ID = ticketlines.TICKET) INNER JOIN payments ON receipts.ID = payments.RECEIPT) INNER JOIN taxlines ON receipts.ID = taxlines.RECEIPT) ON (taxes.ID = ticketlines.TAXID) AND (taxes.ID = taxlines.TAXID)"
cadena3="WHERE (((receipts.DATENEW)>='"
cadena4="' And (receipts.DATENEW)<='"
cadena5="\'))"
cadena6="order by tickets.TICKETID, receipts.DATENEW"
cadena7="""INTO OUTFILE
'/tmp/ventas_descuento.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n';"""
abrir="\"\"\""
fechain=raw_input ("Introduce fecha inicial en formato AAAA-MM-DD: ")
fechafin=raw_input ("Introduce fecha final en formato AAAA-MM-DD: ")
horain="00:00:00"
horafin="23:59:59"
fechahorain=(fechain+" "+horain)
fechahorafin=(fechafin+" "+horafin)
query=(abrir+cadena+separador+cadena2+separador+cadena3+fechahorain+cadena4+fechahorafin+cadena5+separador+cadena6+separador+cadena7+abrir)