123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import csv
- import os
- import pathlib
- from peewee import *
- # from peewee import PostgresqlDatabase
- # from peewee import Model
- NAME_DB = 'python_db'
- USER_DB = 'alex'
- PASS_DB = '123321'
- HOST_DB = 'localhost'
- # Класс подключения к БД
- db = PostgresqlDatabase(database=NAME_DB, user=USER_DB,
- password=PASS_DB, host=HOST_DB)
- class Coin(Model): # Класс таблицы с данными в БД
- num = CharField()
- tik = CharField()
- name = CharField()
- url = TextField()
- cap = CharField()
- price = CharField()
- vol = CharField()
- chg = CharField()
- class Meta: # связь модели с БД
- database = db
- def main():
- db.connect() # связь main() с БД
- db.create_tables([Coin]) # создаём таблицу в БД
- # получаем путь к родительской директории
- path_f = os.path.dirname(pathlib.Path(__file__).parent.absolute())
- # print(os.path.join(path_f, 'lesson_04-2', 'cmc-pages.csv'))
- with open(os.path.join(path_f, 'lesson_04-2', 'cmc-pages.csv')) as file_:
- order = ['num', 'tik', 'name', 'url', 'cap', 'price', 'vol', 'chg']
- reader_f = csv.DictReader(file_, fieldnames=order)
- coins = list(reader_f)
- # способ 1 - очень затратный
- # for data in coins:
- # coin = Coin(
- # num=data['num'],
- # tik=data['tik'],
- # name=data['name'],
- # url=data['url'],
- # cap=data['cap'],
- # price=data['price'],
- # vol=data['vol'],
- # chg=data['chg'])
- # coin.save()
- # способ 2
- # with db.atomic(): # контекстый менеджер для БД
- # for data in coins:
- # # Coin.create(*args, **kwargs)
- # Coin.create(**data)
- # способ 3
- with db.atomic(): # контекстый менеджер для БД
- for index in range(0, len(coins), 100):
- Coin.insert_many(coins[index:index+100]).execute()
- if __name__ == '__main__':
- main()
|