我编写了一个脚本来填充对象列表中的数据库表。
我想重构代码,以便消耗更少的内存。
代码的工作原理如下:
list
pandas DataFrame
SQLAlchemy
DataFrame
pandas
函数to_sql
加载到表格中
醇>
我很想知道,是否有更多记忆轻松的方法来实现这一目标?
例如,在for
循环中填充数据库会不会更好?
我最初尝试过,但遇到了一个错误,在循环结束之前,与数据库的连接一直处于关闭状态。
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
import pandas as pd
#issues_list is the list of objects
issues_list=[item for sublist in issues_set for item in sublist]
data=[]
for issue in issues_list:
if getattr(issue,'Spent time',0) != 0 or "E-" in issue.id:
for work_item in connection.getWorkItems(issue.id): #this is an API call
data.append({'user':work_item.authorLogin,
'date':work_item.date,
'time':work_item.duration,
'id':work_item.id,
'ticket':issue.id,
'updated':issue.updated,
'timestamp':time.time()*1000.0})
df1=pd.DataFrame(data)
Base = declarative_base()
class Work(Base):
__tablename__ = 'Work'
id = Column(String(250),primary_key=True)
user = Column(String(250),primary_key=False)
date = Column(Integer, primary_key=False)
time = Column(Integer, primary_key=False)
ticket = Column(String(250), primary_key=False)
updated = Column(Integer, primary_key=False)
timestamp = Column(Integer, primary_key=False)
engine = create_engine('sqlite:///sqlalchemy_example2.db', pool_recycle=3600)
Base.metadata.create_all(engine)
df1.to_sql('Work',engine,index=False,if_exists='replace')