main.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import csv
  2. import os
  3. import pathlib
  4. from peewee import *
  5. # from peewee import PostgresqlDatabase
  6. # from peewee import Model
  7. NAME_DB = 'python_db'
  8. USER_DB = 'alex'
  9. PASS_DB = '123321'
  10. HOST_DB = 'localhost'
  11. # Класс подключения к БД
  12. db = PostgresqlDatabase(database=NAME_DB, user=USER_DB,
  13. password=PASS_DB, host=HOST_DB)
  14. class Coin(Model): # Класс таблицы с данными в БД
  15. num = CharField()
  16. tik = CharField()
  17. name = CharField()
  18. url = TextField()
  19. cap = CharField()
  20. price = CharField()
  21. vol = CharField()
  22. chg = CharField()
  23. class Meta: # связь модели с БД
  24. database = db
  25. def main():
  26. db.connect() # связь main() с БД
  27. db.create_tables([Coin]) # создаём таблицу в БД
  28. # получаем путь к родительской директории
  29. path_f = os.path.dirname(pathlib.Path(__file__).parent.absolute())
  30. # print(os.path.join(path_f, 'lesson_04-2', 'cmc-pages.csv'))
  31. with open(os.path.join(path_f, 'lesson_04-2', 'cmc-pages.csv')) as file_:
  32. order = ['num', 'tik', 'name', 'url', 'cap', 'price', 'vol', 'chg']
  33. reader_f = csv.DictReader(file_, fieldnames=order)
  34. coins = list(reader_f)
  35. # способ 1 - очень затратный
  36. # for data in coins:
  37. # coin = Coin(
  38. # num=data['num'],
  39. # tik=data['tik'],
  40. # name=data['name'],
  41. # url=data['url'],
  42. # cap=data['cap'],
  43. # price=data['price'],
  44. # vol=data['vol'],
  45. # chg=data['chg'])
  46. # coin.save()
  47. # способ 2
  48. # with db.atomic(): # контекстый менеджер для БД
  49. # for data in coins:
  50. # # Coin.create(*args, **kwargs)
  51. # Coin.create(**data)
  52. # способ 3
  53. with db.atomic(): # контекстый менеджер для БД
  54. for index in range(0, len(coins), 100):
  55. Coin.insert_many(coins[index:index+100]).execute()
  56. if __name__ == '__main__':
  57. main()