我正在尝试使用sql代码保存从sqlite数据库中获取的具有唯一名称的.pdf文件。
例如,我有一个名为“ boringfile.pdf”的文件,但需要将该文件重命名为唯一的员工名称“ max_steel.pdf”
我查看了os.rename
,os.join
,uuid
,pdfrw
和reportlabs
来寻找解决方案。
有人可以帮助我吗?
编辑:
为进一步说明,该数据库是使用sqlite3和python 3.6创建的。示例数据库看起来类似于:
employee_id first_name last_name
123456 Frank Sinatra
738323 Johnny Cash
842028 Bon Jovi
因此,假设我刚刚通过从数据库中提取数据并将其输入到我的报表中来创建Bon Jovi的员工正在处理的文书工作。我的报告当前带有标签“ boringfile.pdf”,但是保存完成的文件时,我需要它读取“ bon_jovi.pdf”。
答案 0 :(得分:1)
在咨询各种网站并打了几个电话之后,我找到了解决方案。创建一个sqlite3
数据库后,我调用所需的信息并将其转换为一行.csv
。我使用csv.reader
读取数据,并使用os.rename
生成唯一名称,这与上面Mark的建议非常相似。
def dataexport(self, *args, **kwargs):
sql = "SELECT * FROM profiles WHERE last_name=? OR first_name=? OR employee_id=?"
data = c.execute(sql, (self.last_se.get(), self.first_se.get(),
self.employeeid_se.get(), )) #this part is meant to grab
#the user input from a gui I made to make form filling
#simple
with open('output.csv', 'w') as f:
writer = csv.writer(f)
writer.writerows(data)
def renamefile(self, *args, **kwargs):
mycsv = csv.reader(open('output.csv'))
for row in mycsv:
employee_id = row[0]
first_name = row[1]
last_name = row[2]
os.rename('boringfile.pdf', first_name + '_' + last_name + '.pdf')
output.csv
运行第一个功能后,.csv文件应为一行:
842028, Bon, Jovi
答案 1 :(得分:1)
不确定使用SQLite为何创建CSV文件然后解析CSV文件。这似乎有点画蛇添足。您可以像这样直接进行操作(无错误检查,仅是概念):
import sqlite3
# Connect to database
db = sqlite3.connect('sample.db')
# Extract person's full name
sql = "SELECT * FROM profiles WHERE last_name=? OR first_name=? OR employee_id=?"
c = db.cursor()
data = c.execute(sql, ('Jovi','Bon','842028'))
# Rename PDF
for row in c:
print('{0} : {1}, {2}'.format(row[0], row[1], row[2]))
PDFname = row[1] + '_' + row[0] + '.pdf'
os.rename('boringfile.pdf', PDFname)