【问题标题】:import and mapping csv to sqlalchemy dynamically动态导入和映射 csv 到 sqlalchemy
【发布时间】:2019-06-20 14:20:13
【问题描述】:

我在烧瓶应用程序中使用 sqlalchemy 创建数据库,并用现有的 CSV 填充数据库并从中选择列,所以我在这里使用 pandas 是我的类创建

我需要添加公司对象并以动态方式提交,但这种方式行不通,csv文件不小,大约20,000条记录我无法手动添加它们,所以有什么建议以动态方式添加它们吗?

from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine
from flask import jsonify

Base = declarative_base()


class Company(Base):
    __tablename__ = 'forbesglobal2000_2016'

    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)
    profits = Column(String(250), nullable=False)
    marketValue = Column(String(250), nullable=False)
    revenue = Column(String(250), nullable=False)
    industry = Column(String(250), nullable=False)





class SIC(Base):
    __tablename__ = "SIC"


    id = Column(Integer, primary_key=True)
    SIC = Column(Integer, nullable=False)
    Industry_name = Column(String(250),ForeignKey('forbesglobal2000_2016.industry'))
    Indusrty = relationship(Company)


# configuration part
engine = create_engine('sqlite:///CompainesData.db')

Base.metadata.create_all(engine)

import sqlalchemy
from sqlalchemy.orm import sessionmaker
from database_setup import *
import pandas as pd
# opening connection with database

engine = create_engine('sqlite:///CompainesData.db')
Base.metadata.bind = engine
# Clear database
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)
session = DBSession()

df = pd.read_csv("forbesglobal2000-2016.csv")
df1 = pd.read_csv("SIC.csv")

# market valuation, revenue, profits and industry
profit_column = df.profits
name_column = df.name
industry_column = df.industry
revenue_column = df.revenue
marketvalue_column = df.marketValue
industry_column_f = df1.Description
SIC_column = df1.SICCode


company = []
i = 1
while i < name_column.__len__():
    company[i] = Company(name = name_column[i] ,     industry=industry_column[i], marketValue = marketvalue_column[i] , profits =     profit_column[i] ,
                     revenue = revenue_column[i] )

    i = i +1
for i in company:
    session.add(i)
    session.commit()


# printing test
com = session.query(Company).all()
for f in com:
    print(f.name)
    print(f.industry)
    print(f.profits)
    print(f.revenue)
    print(f.marketValue)

【问题讨论】:

  • 它给了我这个错误:IndexError: list assignment index out of range

标签: pandas sqlite sqlalchemy flask-sqlalchemy


【解决方案1】:

我认为索引将从 0 而不是 1 开始:

i = 1

应该是

i = 0 

你可以试试吗?

【讨论】:

  • 仍然超出索引。
【解决方案2】:

如果您想将数据从 csv 文件加载到数据库,只需使用 df.to_sql() 函数即可。例如:

df.to_sql(con=engine, name=airlines.__tablename__, if_exists='replace',index=False)

注意index=False,用于忽略pandas id列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 2019-01-18
    • 2017-05-14
    • 2010-11-01
    • 1970-01-01
    • 2020-01-30
    • 2013-06-03
    • 2013-06-20
    相关资源
    最近更新 更多