Import csv works! Many to many books and authors is also nice

master
Alice 6 years ago
parent e6bc9a7ff9
commit d4f23ab507

@ -1,6 +1,11 @@
from app import db
from marshmallow import Schema, fields, ValidationError, pre_load
authors = db.Table('books_authors',
db.Column('book_id', db.Integer, db.ForeignKey('books.id'), primary_key=True),
db.Column('author_id', db.Integer, db.ForeignKey('authors.id'), primary_key=True)
)
class Book(db.Model):
__tablename__ = 'books'
id = db.Column(db.Integer, primary_key = True)
@ -8,9 +13,10 @@ class Book(db.Model):
file = db.Column(db.String(255))
cover = db.Column(db.String(255))
fileformat = db.Column(db.String(255))
author = db.relationship('Author')
tag = db.Column(db.String(255))
authors = db.relationship('Author', secondary=authors, lazy='subquery',
backref=db.backref('books', lazy=True))
def __init__(self, title, file, cover, fileformat, tag):
self.title = title
@ -30,7 +36,7 @@ class Book(db.Model):
class Author(db.Model):
__tablename__ = 'authors'
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('books.id'))
book_id = db.Column(db.Integer(), db.ForeignKey('books.id'))
author_name = db.Column(db.String(50))

@ -1,7 +1,7 @@
#import click
#from flask import Flask
from app import app, db
from app.models import Book
from app.models import Book, Author
from csv import DictReader
import argparse
@ -9,14 +9,27 @@ ap = argparse.ArgumentParser("import csv into flask")
ap.add_argument("csv", help = "csv file to import")
ap.add_argument("--limit", type=int, default = None, help = "limit to x number of x")
args = ap.parse_args()
with open(args.csv) as f:
for row in DictReader(f):
book = Book(row['Title'], '', '', row['Format'], row['Shelf'])
db.session.add(book)
authors = row['Author'].split(',')
authors = [x.strip() for x in authors]
for author in authors:
if author:
a = db.session.query(Author).filter_by(author_name=author).first()
if a == None:
a = Author(author_name=author)
db.session.add(a)
book.authors.append(a)
print(args)
#app = Flask(__name__)
books = db.session.query(Book).all()
#print(books)
#print(row['Title'], authors)
print(a)
# @app.cli.command()
# @click.argument('name')
# def import_csv(name):
# print("hello")
print(book)
db.session.commit()
#print(args)
books = db.session.query(Book).all()

Loading…
Cancel
Save