python从SQLAlchemy中导出导入CSV文件

读写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()

引用

猜你喜欢

转载自blog.csdn.net/qq_24495287/article/details/84800001