Python/MySQL重命名CSV-fi

2024-03-29 08:04:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个小应用程序,用csv从mysql数据库导出数据,它可以工作,但是如果我想创建另一个报表,则会出现以下错误:

你知道吗pymysql.err.InternalError错误:(1086,“文件'/TEMP/.CSV'已存在”)

是,文件已经存在。我的问题是,如何生成两个报告,即使名称相同。例如你好.csv,并遵循你好.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()

Tags: 文件csvimporthostconnect错误withroot
2条回答

您可以导入错误类:

from pymysql.err import InternalError

添加计数器:

fileIndex = 0

然后查看文件是否已存在:

try:
  statm = "SELECT * FROM omniacademp INTO OUTFILE '/TEMP/HI.CSV' FIELDS TERMINATED BY ',' ENCLOSED BY ''"
  cursor.execute(statm)
except InternalError:
  statm = "SELECT * FROM omniacademp INTO OUTFILE '/TEMP/HI ({}).CSV' FIELDS TERMINATED BY ',' ENCLOSED BY ''".format(fileIndex)
  cursor.execute(statm)
  fileIndex += 1

您需要添加一些动态命名级别。我个人使用时间戳。你知道吗

例如,我使用openpyxl来编写excel文件,datetime作为时间戳。你知道吗

通过使用时间戳到秒,你很少会遇到文件名的问题。你知道吗

这是我有数据要写时使用的代码。你知道吗

import os
import openpyxl
from datetime import datetime as dt


list_of_data = [['row1'], ['row2'], ['row3'], ['row4']]

wb = openpyxl.Workbook()  # create workbook
main_ws = wb.worksheets[0]  # designate what worksheet I am working on.
for sub_list in list_of_data:
    main_ws.append(sub_list)  # writing data to each row.

# creating timestamp while removing special characters.
time_stamp = ''.join([{'-': '', ' ': '', ':': '', '.': ''}.get(c, c) for c in str(dt.now())])[0:12]
# build file name.
file_name = '{} - {}.xlsx'.format('report', time_stamp)
# using os library to build path to my local documents folder.
path = os.path.join(os.environ['USERPROFILE'], 'Documents', file_name)
# saving wb.
wb.save(filename=path)

正如你所看到的,我现在有一个excel文件在我的docs文件夹中,有一个时间戳。 enter image description here

相关问题 更多 >