Import csv works! Many to many books and authors is also nice
This commit is contained in:
parent
e6bc9a7ff9
commit
d4f23ab507
0
app/cover.py
Normal file → Executable file
0
app/cover.py
Normal file → Executable file
@ -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
Normal file → Executable file
0
app/static/css/style.css
Normal file → Executable file
0
app/templates/edit_book_detail.html
Normal file → Executable file
0
app/templates/edit_book_detail.html
Normal file → Executable file
0
app/templates/red_link.html
Normal file → Executable file
0
app/templates/red_link.html
Normal file → Executable file
0
app/templates/show_book_detail.html
Normal file → Executable file
0
app/templates/show_book_detail.html
Normal file → Executable file
@ -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__)
|
||||
#print(row['Title'], authors)
|
||||
print(a)
|
||||
|
||||
|
||||
print(book)
|
||||
db.session.commit()
|
||||
#print(args)
|
||||
|
||||
books = db.session.query(Book).all()
|
||||
#print(books)
|
||||
|
||||
# @app.cli.command()
|
||||
# @click.argument('name')
|
||||
# def import_csv(name):
|
||||
# print("hello")
|
||||
|
Loading…
Reference in New Issue
Block a user