繁体   English   中英

Python/MySQL - 重命名 CSV 文件

[英]Python/MySQL - Rename CSV file

我创建了一个小应用程序来从 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()

您可以导入错误类:

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)

如您所见,我的 docs 文件夹中现在有一个带有时间戳的 excel 文件。 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM