我已经使用“ Spyder” Python IDE创建了一个SQLite数据库。该数据库包含一个名为“ Engine_Data”的表。
每个星期,我必须通过变量“ Engine Code”解析“ Engine_Data”中的数据,并将结果输出到CSV。不幸的是,由于存在15种不同类型的引擎代码,因此我不得不手动编写15个单独的SQL查询以便生成15个单独的CSV文件:
这是我的疑问:
q1 = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = 'A';", conn)
q1.to_csv(Engine_Code_A_Path, index=False)
第二个查询:
q2 = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = 'B';", conn)
q2.to_csv(Engine_Code_B_Path, index=False)
依次类推,直到引擎代码O!
当然,这种方法太累了,所以我一直在尝试使用所有引擎代码的数组和for循环动态生成15个CSV文件:
Engine_Code_Array = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']
for i in Engine_Code_Array:
q = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = array[i];", conn)
q.to_csv(Path, index = True)
不用说,我没有运气。关于如何使这个过程完全动态的任何潜在见解?
答案 0 :(得分:2)
参数应在法定人数之外
"Select * from Engine_Data WHERE Engine_Data.[Engine Code] = %s",(Engine_Code_Array[i])
答案 1 :(得分:1)
我认为@mad_基本上是正确的想法,但建议按照以下方式实施它:
import os
def generate_engine_code_CSV_files(dest_path, engine_codes):
""" Generate separate CSV file for each engine code.
"""
for engine_code in engine_codes:
query = (
"Select * from Engine_Data "
"WHERE Engine_Data.[Engine Code] = '{}';".format(engine_code))
query = pd.read_sql_query(query)
report_path = os.path.join(
dest_path, 'Engine Code {} Report.csv'.format(engine_code))
query.to_csv(report_path, index=True)
report_folder_path = "path/to/reports/folder"
generate_engine_code_CSV_files(report_folder_path, 'ABCDEFGHIJKLMNO')