读写CSV数据
读csv文件
将数据读取为一个元祖的序列
import csv
with open('stocks.csv') as f:
f_csv = csv.reader(f)
headers = next(f_csv)
for row in f_csv:
# Process row
...
row是一个列表。访问字段可以用下标。
导入到sqlalchemy时:
header = Node.__table__.columns.keys()
with open(node_csv[0],encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for item in reader:
#通过node_id导入,修改对象属性值
if 'node_id' in header:
node_id = item[header.index('node_id')]
b_query = Node.query.filter_by(node_id=node_id)
if b_query.count():
b_node = b_query.one()
for index in range(1,len(header)):
setattr(b_node, header[index], item[index])
db.session.commit()
写csv文件
将SQLAlchemy的数据导出成csv文件。
使用UTF-8编码,header从Node表中生成,将需要导出的项目从表中查询得到后,写入一行数据,数据是对象record的header属性值。
- 使用示例
outpath = os.path.join(db_folder, "backup_node_%s.csv"%projectid)
outfile = open(outpath, "w", encoding="utf-8", newline="")
outcsv = csv.writer(outfile)
header = Node.__table__.columns.keys()
records = Node.query.filter_by(project_id=projectid).all()
for record in records:
outcsv.writerow([getattr(record, c) for c in header ])
outfile.close()