Add database bits.
This commit is contained in:
parent
43a3cd566c
commit
2a403cb544
21
depicts/database.py
Normal file
21
depicts/database.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
from sqlalchemy import create_engine, func
|
||||
from sqlalchemy.orm import scoped_session, sessionmaker
|
||||
|
||||
session = scoped_session(sessionmaker())
|
||||
|
||||
def init_db(db_url):
|
||||
session.configure(bind=get_engine(db_url))
|
||||
|
||||
def get_engine(db_url):
|
||||
return create_engine(db_url, pool_recycle=3600, pool_size=20, max_overflow=40)
|
||||
|
||||
def init_app(app, echo=False):
|
||||
db_url = app.config['DB_URL']
|
||||
session.configure(bind=get_engine(db_url, echo=echo))
|
||||
|
||||
@app.teardown_appcontext
|
||||
def shutdown_session(exception=None):
|
||||
session.remove()
|
||||
|
||||
def now_utc():
|
||||
return func.timezone('utc', func.now())
|
35
depicts/model.py
Normal file
35
depicts/model.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from .database import session
|
||||
from sqlalchemy.schema import Column, ForeignKey
|
||||
from sqlalchemy.types import Integer, String
|
||||
from sqlalchemy.orm import column_property, relationship
|
||||
from sqlalchemy.ext.associationproxy import association_proxy
|
||||
from sqlalchemy.sql.expression import cast
|
||||
|
||||
Base = declarative_base()
|
||||
Base.query = session.query_property()
|
||||
|
||||
class DepictsItem(Base):
|
||||
__tablename__ = 'depicts'
|
||||
item_id = Column(Integer, primary_key=True, autoincrement=False)
|
||||
label = Column(String)
|
||||
description = Column(String)
|
||||
commons = Column(String)
|
||||
count = Column(Integer)
|
||||
qid = column_property('Q' + cast(item_id, String))
|
||||
db_alt_labels = relationship('DepictsItemAltLabel',
|
||||
collection_class=set,
|
||||
cascade='save-update, merge, delete, delete-orphan',
|
||||
backref='item')
|
||||
alt_labels = association_proxy('db_alt_labels', 'alt_label')
|
||||
|
||||
class DepictsItemAltLabel(Base):
|
||||
__tablename__ = 'depicts_alt_label'
|
||||
item_id = Column(Integer,
|
||||
ForeignKey('depicts.item_id'),
|
||||
primary_key=True,
|
||||
autoincrement=False)
|
||||
alt_label = Column(String, primary_key=True)
|
||||
|
||||
def __init__(self, alt_label):
|
||||
self.alt_label = alt_label
|
Loading…
Reference in a new issue