Как создать таблицу для БД, используя OrderedDict, извлеченный из файла CSV - PullRequest
0 голосов
/ 21 мая 2019

Я делаю проект для раздела 4 по технической степени TeamTreehouse.com по питону.Я прошел раздел 4 в течение 2 дней, прошел все тесты и выполнил все задачи, связанные с кодом, но я все еще не могу выяснить, как записать данные в файл БД с использованием peewee и orderDict после чтения информации из файла CSV.Я прочитал документацию заказанного Dict и peewee's, но я не могу найти, как записать OrderedDict в БД.

Я пробовал искать документацию и пересматривать обучающие видео на teamtreehouse.com и не могу найти никаких примеров этого вообще.

from collections import OrderedDict
import datetime
import sys
import csv

from peewee import *

db = SqliteDatabase('inventory.db')


class Product(Model):
    content = TextField()
    id = PrimaryKeyField()
    product_name = TextField(unique=True)
    product_price = TextField()
    product_quantity = TextField()
    date_updated = DateTimeField(datetime.datetime.now)

    class Meta:
        database = db

def migrate_data():
    with open('inventory.csv') as csvfile:
        reader = csv.reader(csvfile, delimiter=",")
        keys = next(reader)
        #ordered = ([OrderedDict(zip(keys,row)) for row in reader ])
        print('\n\n')
        print([OrderedDict(zip(keys,row)) for row in reader ])
        print('\n\n')



def initialize():
    """ Initialize an Sqlite database called inventory.db."""
    db.connect()
    db.create_tables([Product], safe=True)


def create_model():
    """ Create a model called Product that the Peewee ORM will use to 
build the database. 
The Product model should have five attributes: product_id, product_name, 
product_quantity, 
product_price. Use PeeWee's built in primary_key functionality for the 
product_id field,
 so that each product will have an automatically generated unique 
identifier."""
    productname = ('product_name')

Ожидаемым результатом для этого вопроса будет запись OrderedDict, созданного из чтения файла CSV, в файл sqlite с использованием peewee.Вы можете скачать CSV-файл И полный код Python с моего github (Yeransian) и в разделе "Treehouse-Project4"

Любая помощь, чтобы справиться с этим спадом, будет потрясающей!Чем быстрее я вернусь к обучению, тем лучше.:)

1 Ответ

0 голосов
/ 21 мая 2019

По моему мнению, CSV, который похож на таблицу, должен переводить в list из dicts.Самым простым (хотя и не самым эффективным) способом было бы зациклить этот список и создать экземпляр Product.

# something along these lines
def save_list_to_db(list_of_dicts_from_csv): 
    for single_product_dict in list_of_dicts_from_csv:
        Product.create(content = single_product_dict['content'],
                       id = single_product_dict['id'], ....
                       )

Как уже говорилось, это не очень эффективный способ, поскольку он открывает соединение с базой данных для каждого Product.create(...).Объемные вставки более эффективны.Вы можете прочитать об этом здесь .Удачи!

...