Browse Source

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

ansible-setup-and-deploy
Alice 6 years ago
parent
commit
d4f23ab507
  1. 0
      app/cover.py
  2. 10
      app/models.py
  3. 0
      app/static/css/style.css
  4. 0
      app/templates/edit_book_detail.html
  5. 0
      app/templates/red_link.html
  6. 0
      app/templates/show_book_detail.html
  7. 31
      import_csv.py
  8. 0
      init.py

0
app/cover.py

10
app/models.py

@ -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))

0
app/static/css/style.css

0
app/templates/edit_book_detail.html

0
app/templates/red_link.html

0
app/templates/show_book_detail.html

31
import_csv.py

@ -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()

0
init.py

Loading…
Cancel
Save