57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
import pandas as pd
|
|
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
|
|
from sqlalchemy import insert
|
|
from db.config import settings
|
|
from db.models.base import Base
|
|
from db.models.experiment_data_model import ExperimentData
|
|
from db.models.experiment_parameters_model import ExperimentParameters
|
|
from db.models.load_parameters_model import LoadParameters
|
|
from db.models.recycling_parameters_model import RecyclingParameters
|
|
import asyncio
|
|
|
|
engine = create_async_engine(url=settings.db_url_asyncpg, echo=True)
|
|
|
|
async_session = async_sessionmaker(engine)
|
|
|
|
|
|
|
|
async def create_all_tables():
|
|
async with engine.begin() as conn:
|
|
await conn.run_sync(Base.metadata.create_all)
|
|
|
|
async def drop_all_tables():
|
|
async with engine.begin() as conn:
|
|
await conn.run_sync(Base.metadata.drop_all)
|
|
|
|
|
|
async def load_data_to_db(file: str, model_class):
|
|
async with async_session() as session:
|
|
df = pd.read_csv(file).dropna()
|
|
# Преобразование данных из DataFrame в формат, подходящий для SQLAlchemy
|
|
data_records = df.to_dict(orient='records')
|
|
|
|
# Пакетная вставка всех записей
|
|
stmt = insert(model_class).values(data_records)
|
|
await session.execute(stmt)
|
|
|
|
await session.commit()
|
|
|
|
|
|
async def main():
|
|
# await drop_all_tables()
|
|
# await create_all_tables()
|
|
await load_data_to_db('./files/experiment_data.csv', ExperimentData)
|
|
# await load_data_to_db('./files/load_parameters.csv', LoadParameters)
|
|
# await load_data_to_db('./files/recycling_parameters.csv', RecyclingParameters)
|
|
# await load_data_to_db('./files/experiment_parameters.csv', ExperimentParameters)
|
|
|
|
if __name__ == '__main__':
|
|
asyncio.run(main())
|
|
# df = pd.read_csv('./files/experiment_data.csv')
|
|
# headers = df.columns.tolist()
|
|
# print(headers)
|
|
#
|
|
# for header in headers:
|
|
# column_type = df[header].dtype
|
|
# print(column_type)
|