减少python数据库脚本的内存使用量

时间:2016-03-17 14:44:55

标签: python python-2.7 pandas sqlalchemy

我编写了一个脚本来填充对象列表中的数据库表。

我想重构代码,以便消耗更少的内存。

代码的工作原理如下:

  1. 循环浏览列表并将某些属性附加到list
  2. 从列表
  3. 创建pandas DataFrame
  4. 使用SQLAlchemy
  5. 定义表格
  6. 使用DataFrame pandas函数
  7. 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')
    

0 个答案:

没有答案