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