我想在我的Python 3.6包的子包中包含一个文本资源文件(用于存储复杂的SQL请求代码)并在运行时读取它(作为字符串,字符串集合或文件,无论如何) 。怎么可能这样做?
答案 0 :(得分:1)
为什么要将它存储在代码之外? Python有多行字符串,所以如果它只是一个可读性的问题,你不需要一个独特的文本文件:
# mydbcode.py
# not really complex actually but you get the point...
complex_query = """
SELECT GROUPS.PGROUP, SUM(P.AMOUNT)
FROM PENALTIES AS P,
(SELECT 1 AS PGROUP, '1980-01-01' AS START,
'1981-06-30' AS END
UNION
SELECT 2, '1981-07-01', '1982-12-31'
UNION
SELECT 3, '1983-01-01', '1984-12-31') AS GROUPS
WHERE P.PAYMENT_DATE BETWEEN START AND END
GROUP BY GROUPS.PGROUP
ORDER BY 1
"""
现在,如果确实希望将它放在使用它的包中的.sql文件中,那么只需找到文件并阅读它即可。这里唯一的“难点”是找到文件,但您可以使用__file__
魔术变量和os.path
函数来获取它:
# mydbcode.py
import os
_HERE = os.path.dirname(os.path.abspath(__file__))
_SQLFILE = os.path.join(_HERE, "myquery.sql")
def read_query():
with open(_SQLFILE) as f:
return f.read().strip()