Al escribir una expresión regular, es posible escribir la expresión en varias líneas e incluir la anotación, luego compilar la expresión usando la re.VERBOSE
opción antes de pasar la versión compilada. Me gustaría hacer algo similar con un pandas.read_sql_query
.
Por ejemplo, en lugar de:
result = pd.read_sql_query('select a.gvkey, a.tic, a.datadate as fyearend, year(a.datadate) as year, month(a.datadate) as fyrc, b.datadate, month(b.datadate) as month, b.trt1m from COMPM.FUNDA a join COMPM.SECM b on a.gvkey = b.gvkey and year(a.datadate) = year(b.datadate) where a.TIC = "IBM" and a.datafmt = "STD" and a.consol="C" and a.indfmt = "INDL" and year(a.datadate)>1980', engine)
Me gustaría escribir algo como:
q = """select a.gvkey,
a.tic, #COMMENTS
a.datadate as fyearend, #COMMENTS
year(a.datadate) as year, #COMMENTS
month(a.datadate) as fyrc, b.datadate,
month(b.datadate) as month,
b.trt1m
from COMPM.FUNDA a join COMPM.SECM b on a.gvkey = b.gvkey and year(a.datadate) = year(b.datadate)
where a.TIC = "IBM"
and a.datafmt = "STD"
and a.consol="C"
and a.indfmt = "INDL"
and year(a.datadate)>1980
"""
result = p.read_sql_query(q ,engine)
Mi pregunta está relacionada con esta pregunta sobre la división de comandos de Python en varias líneas, pero me gustaría agregar comentarios dentro de la consulta.
Como mencioné, lo que me gustaría hacer en el caso de pandas / SQL es similar a lo que se puede hacer en el caso de expresión regular con re.VERBOSE
. Aquí hay un ejemplo con expresiones regulares:
pattern = r'''\s(shares?| #COMMENTS
warrants?| #COMMENTS
stock| #AND SO ON...
(non)?vest(ed)?
)\b
'''
crit = re.compile(pattern_nopt, re.VERBOSE)
match=re.search(crit, string)
Esto haría que la consulta sea más legible y me parece importante anotar las consultas de forma exhaustiva al compartir código con los coautores.
Sí, funcionará, pero debe usar el delimitador de comentarios correcto para SQLite :
--
para un comentario en línea
/* foo.. */
(como en C) para un comentario de varias líneas
Entonces se verá así:
q = """select a.gvkey,
a.tic, -- COMMENTS
a.datadate as fyearend, -- COMMENTS
year(a.datadate) as year, /* Another very long
and multi-lines comment... */
month(a.datadate) as fyrc, b.datadate,
month(b.datadate) as month,
b.trt1m from COMPM.FUNDA a join COMPM.SECM b on a.gvkey = b.gvkey and year(a.datadate) = year(b.datadate)
where a.TIC = "IBM"
and a.datafmt = "STD"
and a.consol="C"
and a.indfmt = "INDL"
and year(a.datadate)>1980
"""
result = p.read_sql_query(q, conn)
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras