我是学生学习python,对于我的项目,我正在使用SQLite开发一个库存管理系统。
我有点坚持将“需要订购的库存”保存到文本文件中。 我想我只需要将一个列表保存到.txt文件中,但是我已经玩了几个小时试图弄明白。
SQL statment从数据库中获取数据,这些数据是我要保存到txt文件的内容。
我试图使用pickle.dump然而它与(“\ n”)没有太好用,因为我不会在每一行数据的新行上。
任何帮助都会很可爱......
我的代码如下:
import sqlite3, menus, pickle
def main():
with sqlite3.connect("mrsimms.db") as db:
cursor = db.cursor()
data = int(input("Please enter the max number in stock you wish to disply: "))
sql = "select * from Stock where NumberInStock between 0 and '{0}'".format(data)
cursor.execute(sql)
data = cursor.fetchall()
print(data[0])
print()
print(data[1])
print()
print('1. Save order list to a file')
print('2. Do another order list')
print('9. Quit')
choice=int(input('what would you like to do?'))
if choice ==1:
pickle.dump(data("\n"), open('orderlist.txt','wb'))
print('Your list has been saved...')
elif choice ==2:
main()
elif choice ==9:
menus.menu1()
main()
答案 0 :(得分:2)
首先,您必须回答一个重要问题:“我想要的文本文件中的数据格式是什么?”。请注意,sqlite有自己的数据格式,从那个角度来看,你已经将数据放在一个文件中(mrsimms.db
)。这更有意义,特别是因为你正在玩pickle
,这实际上并不是人类可读的。
一旦你回答它应该是非常直接的。
例如,如果您想以CSV格式保存,那么这样做:
import csv
with open("orderlist.txt", "wb") as f:
writer = csv.writer(f)
writer.writerows(data)
如果你想要泡菜:
with open("orderlist.txt", "wb") as f:
pickle.dump(data, f)
data("\n")
没有多大意义。 data
是一个列表,因为它是fetchall()
的结果。列表在Python中不可调用。
如果你想要每行一个泡菜,那么你可以这样做:
with open("orderlist.txt", "wb") as f:
for row in data:
pickle.dumps(row, f)
f.write(b"\n")
虽然很难看。我不推荐它。
答案 1 :(得分:0)
您可以使用此方法将列表写入文件。
lines = ["line one \n", "line two \n", "line three \n"]
OutFile = open("lines.txt", "w")
OutFile.writelines(lines)
OutFile.close()
答案 2 :(得分:0)
@freakish有一个很好的答案。如果您想要人类可读的东西,您可以使用从select调用中获得的数据将格式化的字符串写入文件。假设您的数据库有一个名为ProductName的列,您可以将结果限制为要显示的数据(并通过迭代光标删除几行代码)并执行:
import sqlite3
def main():
with sqlite3.connect("mrsimms.db") as db:
with open('stock.txt', 'w') as fp:
cursor = db.cursor()
data = int(input("Please enter the max number in stock you wish to disply: "))
sql = "select NumberInStock, ProductName from Stock where NumberInStock between 0 and '{0}'".format(data)
for row in cursor.execute(sql):
print(row) # should be something like (42, "Pickles")
fp.write('We only have {0} {1}\n'.format(*row))
main()