динамически импортировать и отображать csv в sqlalchemy - PullRequest
0 голосов
/ 27 января 2019

Я создаю базу данных с использованием sqlalchemy в приложении фляги и заполняю базу данных существующим CSV выбранными столбцами из нее, поэтому я использую панд, вот мое создание классов

Мне нужно добавлять объекты компании и фиксировать их динамически, но этот способ не работает, файл 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)

1 Ответ

0 голосов
/ 27 января 2019

Я думаю, что индекс будет начинаться с 0, а не с 1:

i = 1

должно быть

i = 0 

Вы можете попробовать это?

...