【发布时间】:2020-04-11 02:55:47
【问题描述】:
我创建了一个小应用程序以 csv 格式从我的 mysql 数据库中导出数据,它可以工作,但是如果我想创建另一个报告,则会出现以下错误:
pymysql.err.InternalError: (1086, "文件 '/TEMP/.CSV' 已经存在")
是的,文件已经存在。我的问题是,如何生成两个报告,即使名称相同。前任。 hi.csv,以及以下 hi.csv (1) 以下是以下代码:
import tkinter as tk
import pymysql
root = tk.Tk()
root.geometry("")
root.title("excel teste")
conn = pymysql.connect(host="localhost", port=3306, user="root", password="", database="omnia")
with conn:
print("connect successfull!")
cursor = conn.cursor()
with cursor:
cursor.execute("SELECT VERSION()")
versao = cursor.fetchone()
print("Versão do gerenciador Maria DB: %s" % versao)
def exp_rel_con_pag():
conn = pymysql.connect(host="localhost", port=3306, user="root", password="", database="omnia")
with conn:
statm = "SELECT * FROM omniacademp INTO OUTFILE '/TEMP/"".CSV' FIELDS TERMINATED BY ',' ENCLOSED BY ''"
cursor = conn.cursor()
with cursor:
cursor.execute(statm)
results = cursor.fetchone()
print(results)
tk.Button(root, width=15, text="run", command=exp_rel_con_pag).place(x=10, y=10)
root.mainloop()
【问题讨论】:
-
OUTFILE必须动态创建,这有意义吗? -
如何使用
try-except和一个计数器,使用文件名中的计数器值,每次引发异常时增加计数器? -
@DeepSpace 更好的做法是使用
os模块来检查文件是否存在,而不是try/except -
@aws_apprentice 那么OP每次都需要从0开始,并检查文件是否存在,直到找到不存在的名称。我的想法是相反的。在任何情况下,想法都是一样的。此外,EAFP 概念更喜欢
try-except方法(忽略它增加的小开销)。它也不太容易出现en.wikipedia.org/wiki/Time-of-check_to_time-of-use -
@aws_apprentice 实际上,只要可能出现竞争条件,try/except 就是“最佳实践”——操作系统之间的另一个进程很可能会创建同名文件。 path.exists 检查和 cursor.execute 调用。