我有日期列表
datefromto=['2018-06-16','2018-08-10','2018-09-12']
选择查询应针对给定日期进行查询并存储在 csv 文件中
for dates in datefromto:
yesterbilling="""select * from student_date where date(datetime)= """+str(dates)+""" and daynumber="""+str(time.strftime("%w", time.strptime(dates, "%Y-%m-%d")))+""" and status='attended' """
cursor.execute(yesterbilling)
yesterbillings = cursor.fetchall()
myFile = open(students.csv, 'w')
with myFile:
writer = csv.writer(myFile)
writer.writerows(yesterbillings)
print("Writing complete")
这适用于没有 forloop 的单个日期。 Mysql 内的 for 循环不工作。没有错误,但数据未写入。我在 for 循环之外编写了 with 函数,但 csv 中没有写入数据。
请帮帮我
最佳答案
两个选项。
选项 1:使用 a
进行追加,而不是在每次循环期间使用 w
进行覆盖。像这样:
myFile = open(students.csv, 'a')
选项 2(更好):使用 SQL 的 in
子句,如下所示:
yesterbilling="select * from student_date where date(datetime) in ('" + "','".join(datefromto) + "') and status='attended' "
cursor.execute(yesterbilling)
yesterbillings = cursor.fetchall()
# now it's safe to use 'w' because the writing will be done at once
myFile = open(students.csv, 'w')
with myFile:
writer = csv.writer(myFile)
writer.writerows(yesterbillings)
还有一件事:如果您的 Python 字符串不会跨越多行,则不需要 """
。只需使用单个 "
。
此外,了解如何使用:
- Python string format
- 带参数的 sql 语句(将参数传递给 SQL 语句的更安全、更快速的方法)
关于python - python中select语句中的mysql for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52406466/