def do_upgrade(): """Implement your upgrades here.""" # add column "id" in the table op.add_column( 'collection_field_fieldvalue', db.Column('id', db.MediumInteger(9, unsigned=True), nullable=False)) # set all new ids records = run_sql("""SELECT id_collection, id_field, id_fieldvalue, type, score, score_fieldvalue FROM collection_field_fieldvalue AS cff ORDER BY cff.id_collection, id_field, id_fieldvalue, type, score, score_fieldvalue""") for index, rec in enumerate(records): sql = """UPDATE collection_field_fieldvalue SET id = %%s WHERE id_collection = %%s AND id_field = %%s AND type = %%s AND score = %%s AND score_fieldvalue = %%s AND id_fieldvalue %s """ % ('=%s' % (rec[2], ) if rec[2] is not None else 'is NULL', ) run_sql(sql, (index + 1, rec[0], rec[1], rec[3], rec[4], rec[5])) # create new primary key with id op.create_primary_key('pk_collection_field_fieldvalue_id', 'collection_field_fieldvalue', ['id']) # set id as autoincrement op.alter_column('collection_field_fieldvalue', 'id', existing_type=db.MediumInteger(9, unsigned=True), existing_nullable=False, autoincrement=True)
class IdxINDEXField(db.Model): """Represent a IdxINDEXField record.""" __tablename__ = 'idxINDEX_field' id_idxINDEX = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(IdxINDEX.id), primary_key=True) id_field = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Field.id), primary_key=True) regexp_punctuation = db.Column(db.String(255), nullable=False, server_default='[.,:;?!"]') regexp_alphanumeric_separators = db.Column(db.String(255), nullable=False) # FIX ME , # server_default='[!"#$\\%&''()*+,-./:;<=>?@[\\]^\\_`{|}~]') idxINDEX = db.relationship(IdxINDEX, backref='fields', lazy='joined', innerjoin=True) field = db.relationship(Field, backref='idxINDEXes', lazy='joined', innerjoin=True) @classmethod def get_field_tokenizers(cls): """Get field tokenizers.""" return db.session.query(Field.name, IdxINDEX.tokenizer).all()
class KnwKBDDEF(db.Model): """Represent a KnwKBDDEF record.""" __tablename__ = 'knwKBDDEF' id_knwKB = db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(KnwKB.id), nullable=False, primary_key=True) id_collection = db.Column(db.MediumInteger(unsigned=True), db.ForeignKey(Collection.id), nullable=True) output_tag = db.Column(db.Text, nullable=True) search_expression = db.Column(db.Text, nullable=True) kb = db.relationship(KnwKB, backref=db.backref('kbdefs', uselist=False, cascade="all, delete-orphan"), single_parent=True) collection = db.relationship(Collection, backref=db.backref('kbdefs')) def to_dict(self): """Return a dict representation of KnwKBDDEF.""" return { 'field': self.output_tag, 'expression': self.search_expression, 'coll_id': self.id_collection, 'collection': self.collection.name if self.collection else None }
class BibdocBibdoc(db.Model): """Represent a BibdocBibdoc record.""" __tablename__ = 'bibdoc_bibdoc' id = db.Column(db.MediumInteger(9, unsigned=True), primary_key=True, nullable=False, autoincrement=True) id_bibdoc1 = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Bibdoc.id), nullable=True) version1 = db.Column(db.TinyInteger(4, unsigned=True)) format1 = db.Column(db.String(50)) id_bibdoc2 = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Bibdoc.id), nullable=True) version2 = db.Column(db.TinyInteger(4, unsigned=True)) format2 = db.Column(db.String(50)) rel_type = db.Column(db.String(255), nullable=True) bibdoc1 = db.relationship(Bibdoc, backref='bibdoc2s', primaryjoin=Bibdoc.id == id_bibdoc1) bibdoc2 = db.relationship(Bibdoc, backref='bibdoc1s', primaryjoin=Bibdoc.id == id_bibdoc2)
class FieldTag(db.Model): """Represent a FieldTag record.""" __tablename__ = 'field_tag' id_field = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey('field.id'), nullable=False, primary_key=True) id_tag = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey('tag.id'), nullable=False, primary_key=True) score = db.Column(db.TinyInteger(4, unsigned=True), nullable=False, server_default='0') tag = db.relationship(Tag, backref='fields', order_by=score) field = db.relationship(Field, backref='tags', order_by=score) def __init__(self, score=None, tup=None, *args, **kwargs): if score is not None: self.score = score if tup is not None: self.tag = Tag(tup) super(FieldTag, self).__init__(*args, **kwargs) @property def as_tag(self): """ Returns Tag record directly.""" return self.tag
class HstDOCUMENT(db.Model): """Represent a HstDOCUMENT record.""" __tablename__ = 'hstDOCUMENT' id = db.Column(db.Integer(15, unsigned=True), primary_key=True, nullable=False, autoincrement=True) id_bibdoc = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Bibdoc.id), primary_key=True, nullable=False, autoincrement=False) docname = db.Column(db.String(250), nullable=False, index=True) docformat = db.Column(db.String(50), nullable=False, index=True) docversion = db.Column(db.TinyInteger(4, unsigned=True), nullable=False) docsize = db.Column(db.BigInteger(15, unsigned=True), nullable=False) docchecksum = db.Column(db.Char(32), nullable=False) doctimestamp = db.Column(db.DateTime, nullable=False, index=True) action = db.Column(db.String(50), nullable=False, index=True) job_id = db.Column(db.MediumInteger(15, unsigned=True), nullable=True, index=True) job_name = db.Column(db.String(255), nullable=True, index=True) job_person = db.Column(db.String(255), nullable=True, index=True) job_date = db.Column(db.DateTime, nullable=True, index=True) job_details = db.Column(db.iBinary, nullable=True)
class CollectionFieldFieldvalue(db.Model): """Represent a CollectionFieldFieldvalue record.""" __tablename__ = 'collection_field_fieldvalue' id_collection = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Collection.id), primary_key=True, nullable=False) id_field = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Field.id), primary_key=True, nullable=False) id_fieldvalue = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Fieldvalue.id), primary_key=True, nullable=True) type = db.Column(db.Char(3), nullable=False, server_default='src') score = db.Column(db.TinyInteger(4, unsigned=True), nullable=False, server_default='0') score_fieldvalue = db.Column(db.TinyInteger(4, unsigned=True), nullable=False, server_default='0') collection = db.relationship(Collection, backref='field_fieldvalues', order_by=score) field = db.relationship(Field, backref='collection_fieldvalues', lazy='joined') fieldvalue = db.relationship(Fieldvalue, backref='collection_fields', lazy='joined')
def do_upgrade(): """Implement your upgrades here.""" # drop primary keys # (not necessary, because trick in invenio/base/scripts/database.py already # remove the primary key) # op.drop_constraint(None, 'collection_field_fieldvalue', # type_='primary') # add column "id" in the table op.add_column('collection_field_fieldvalue', db.Column('id', db.MediumInteger(9, unsigned=True), nullable=False)) # set all new ids records = run_sql("""SELECT id_collection, id_field, type, score, score_fieldvalue FROM collection_field_fieldvalue AS cff ORDER BY cff.id_collection, id_field, type, score, score_fieldvalue""") for index, rec in enumerate(records): run_sql("""UPDATE collection_field_fieldvalue SET id = %s WHERE id_collection = %s AND id_field = %s AND type = %s AND score = %s AND score_fieldvalue = %s """, (index + 1, rec[0], rec[1], rec[2], rec[3], rec[4])) # create new primary key with id op.create_primary_key('pk_collection_field_fieldvalue_id', 'collection_field_fieldvalue', ['id']) # set id as autoincrement op.alter_column('collection_field_fieldvalue', 'id', existing_type=db.MediumInteger(9, unsigned=True), existing_nullable=False, autoincrement=True)
class CollectionCollection(db.Model): """Represent a CollectionCollection record.""" __tablename__ = 'collection_collection' id_dad = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Collection.id), primary_key=True) id_son = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Collection.id), primary_key=True) type = db.Column(db.Char(1), nullable=False, server_default='r') score = db.Column(db.TinyInteger(4, unsigned=True), nullable=False, server_default='0') son = db.relationship( Collection, primaryjoin=id_son == Collection.id, backref='dads', # FIX # collection_class=db.attribute_mapped_collection('score'), order_by=db.asc(score)) dad = db.relationship(Collection, primaryjoin=id_dad == Collection.id, backref='sons', order_by=db.asc(score))
class OaiHARVESTLOG(db.Model): """Represents a OaiHARVESTLOG record.""" __tablename__ = 'oaiHARVESTLOG' id_oaiHARVEST = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(OaiHARVEST.id), nullable=False) id_bibrec = db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(Bibrec.id), nullable=False, server_default='0') bibupload_task_id = db.Column(db.Integer(11), db.ForeignKey(SchTASK.id), nullable=False, server_default='0', primary_key=True) oai_id = db.Column(db.String(40), nullable=False, server_default='', primary_key=True) date_harvested = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00', primary_key=True) date_inserted = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00') inserted_to_db = db.Column(db.Char(1), nullable=False, server_default='P') bibrec = db.relationship(Bibrec, backref='harvestlogs') schtask = db.relationship(SchTASK)
class CollectionExternalcollection(db.Model): """Represent a CollectionExternalcollection record.""" __tablename__ = 'collection_externalcollection' id_collection = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Collection.id), primary_key=True, server_default='0') id_externalcollection = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Externalcollection.id), primary_key=True, server_default='0') type = db.Column(db.TinyInteger(4, unsigned=True), server_default='0', nullable=False) def _collection_type(type_): return db.relationship( Collection, primaryjoin=lambda: db.and_( CollectionExternalcollection.id_collection == Collection.id, CollectionExternalcollection.type == type_), backref='_externalcollections_{0}'.format(str(type_))) collection_0 = _collection_type(0) collection_1 = _collection_type(1) collection_2 = _collection_type(2) externalcollection = db.relationship(Externalcollection)
class RnkDOWNLOADS(db.Model): """Represent a RnkDOWNLOADS record.""" __tablename__ = 'rnkDOWNLOADS' id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True) id_bibrec = db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(Bibrec.id), nullable=True) download_time = db.Column(db.DateTime, nullable=True, server_default='1900-01-01 00:00:00') client_host = db.Column(db.Integer(10, unsigned=True), nullable=True) id_user = db.Column(db.Integer(15, unsigned=True), db.ForeignKey(User.id), nullable=True) id_bibdoc = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Bibdoc.id), nullable=True) file_version = db.Column(db.SmallInteger(2, unsigned=True), nullable=True) file_format = db.Column(db.String(50), nullable=True) bibrec = db.relationship(Bibrec, backref='downloads') bibdoc = db.relationship(Bibdoc, backref='downloads') user = db.relationship(User, backref='downloads')
class IdxINDEXIdxINDEX(db.Model): """Represent an IdxINDEXIdxINDEX record.""" __tablename__ = 'idxINDEX_idxINDEX' id_virtual = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(IdxINDEX.id), nullable=False, server_default='0', primary_key=True) id_normal = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(IdxINDEX.id), nullable=False, server_default='0', primary_key=True) virtual = db.relationship( IdxINDEX, backref=db.backref('normal'), primaryjoin="and_(IdxINDEXIdxINDEX.id_virtual==IdxINDEX.id)" ) normal = db.relationship( IdxINDEX, backref=db.backref('virtual'), primaryjoin="and_(IdxINDEXIdxINDEX.id_normal==IdxINDEX.id)" ) @staticmethod def is_virtual(id_virtual): """Check if index is virtual.""" return db.session.query( IdxINDEXIdxINDEX.query.filter_by( id_virtual=id_virtual).exists()).scalar()
class CollectionClsMETHOD(db.Model): """Represents a Collection_clsMETHOD record.""" __tablename__ = 'collection_clsMETHOD' id_collection = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Collection.id), primary_key=True, nullable=False) id_clsMETHOD = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(ClsMETHOD.id), primary_key=True, nullable=False) collection = db.relationship(Collection, backref='clsMETHODs') clsMETHOD = db.relationship(ClsMETHOD, backref='collections')
class CollectionExample(db.Model): """Represent a CollectionExample record.""" __tablename__ = 'collection_example' id_collection = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Collection.id), primary_key=True) id_example = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Example.id), primary_key=True) score = db.Column(db.TinyInteger(4, unsigned=True), nullable=False, server_default='0') collection = db.relationship(Collection, backref='_examples', order_by=score) example = db.relationship(Example, backref='collections', order_by=score)
class IdxQMixin(TableNameMixin): """Mixin for Idx(PAIR|PHRASE|WORD)01Q tables.""" id = db.Column(db.MediumInteger(10, unsigned=True), primary_key=True, autoincrement=True) runtime = db.Column(db.DateTime, nullable=False, index=True, server_default='0001-01-01 00:00:00') id_bibrec_low = db.Column(db.MediumInteger(9, unsigned=True), nullable=False) id_bibrec_high = db.Column(db.MediumInteger(9, unsigned=True), nullable=False) index_name = db.Column(db.String(50), nullable=False, server_default='', index=True) mode = db.Column(db.String(50), nullable=False, server_default='update')
class AccAuthorization(db.Model): """Represent an authorization.""" __tablename__ = 'accROLE_accACTION_accARGUMENT' id = db.Column(db.Integer(15, unsigned=True), primary_key=True, autoincrement=True) id_accROLE = db.Column(db.Integer(15, unsigned=True), db.ForeignKey(AccROLE.id), nullable=True, index=True) id_accACTION = db.Column(db.Integer(15, unsigned=True), db.ForeignKey(AccACTION.id), nullable=True, index=True) _id_accARGUMENT = db.Column(db.Integer(15), db.ForeignKey(AccARGUMENT.id), nullable=True, name="id_accARGUMENT", index=True) argumentlistid = db.Column(db.MediumInteger(8), nullable=True) role = db.relationship(AccROLE, backref='authorizations') action = db.relationship(AccACTION, backref='authorizations') argument = db.relationship(AccARGUMENT, backref='authorizations') @db.hybrid_property def id_accARGUMENT(self): """get id_accARGUMENT.""" return self._id_accARGUMENT @id_accARGUMENT.setter def id_accARGUMENT(self, value): """set id_accARGUMENT.""" self._id_accARGUMENT = value or None
def id_bibxxx(cls): return db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(cls._bibxxx.id), nullable=False, primary_key=True, index=True, server_default='0')
class JrnJOURNAL(db.Model): """Represents a JrnJOURNAL record.""" __tablename__ = 'jrnJOURNAL' id = db.Column(db.MediumInteger(9, unsigned=True), nullable=False, primary_key=True, autoincrement=True) name = db.Column(db.String(50), nullable=False, unique=True, server_default='')
class Collectionname(db.Model): """Represent a Collectionname record.""" __tablename__ = 'collectionname' id_collection = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Collection.id), nullable=False, primary_key=True) ln = db.Column(db.Char(5), nullable=False, primary_key=True, server_default='') type = db.Column(db.Char(3), nullable=False, primary_key=True, server_default='sn') value = db.Column(db.String(255), nullable=False) @db.hybrid_property def ln_type(self): """Get ln type.""" return (self.ln, self.type) @ln_type.setter def set_ln_type(self, value): """Set ln type.""" (self.ln, self.type) = value
class Collectionboxname(db.Model): """Represent a Collectionboxname record.""" __tablename__ = 'collectionboxname' TYPES = { 'v': 'Focus on:', 'r': 'Narrow by collection:', 'l': 'Latest additions:', } id_collection = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(Collection.id), nullable=False, primary_key=True) ln = db.Column(db.Char(5), nullable=False, primary_key=True, server_default='') type = db.Column(db.Char(3), nullable=False, primary_key=True, server_default='r') value = db.Column(db.String(255), nullable=False) @db.hybrid_property def ln_type(self): return (self.ln, self.type) @ln_type.setter def set_ln_type(self, value): (self.ln, self.type) = value
class LnkENTRY(db.Model): """Represents a LnkENTRY record.""" __tablename__ = 'lnkENTRY' id = db.Column(db.Integer(15, unsigned=True), primary_key=True, nullable=False) origin_url = db.Column(db.String(100), nullable=False) id_bibrec = db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(Bibrec.id), nullable=False) additional_properties = db.Column(db.Binary) type = db.Column(db.String(30), nullable=False, index=True) status = db.Column(db.String(30), nullable=False, server_default='PENDING', index=True) insert_time = db.Column(db.DateTime, server_default='1900-01-01 00:00:00', index=True) @property def title(self): try: return db.object_session(self).query(LnkENTRYURLTITLE).\ filter(db.and_( LnkENTRYURLTITLE.url==self.origin_url, LnkENTRYURLTITLE.title<>"", LnkENTRYURLTITLE.broken==0)).first().title except: return self.origin_url
def do_upgrade(): """Carry out the upgrade.""" op.alter_column(table_name='oaiHARVESTLOG', column_name='bibupload_task_id', type_=db.MediumInteger(15, unsigned=True), existing_nullable=False, existing_server_default='0')
class Bibdoc(db.Model): """Represent a Bibdoc record.""" __tablename__ = 'bibdoc' id = db.Column(db.MediumInteger(9, unsigned=True), primary_key=True, nullable=False, autoincrement=True) status = db.Column(db.Text, nullable=False) docname = db.Column( db.String(250), nullable=True, # collation='utf8_bin' index=True) creation_date = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00', index=True) modification_date = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00', index=True) text_extraction_date = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00') doctype = db.Column(db.String(255))
class AccAuthorization(db.Model): """Represent an authorization.""" __tablename__ = 'accROLE_accACTION_accARGUMENT' id_accROLE = db.Column(db.Integer(15, unsigned=True), db.ForeignKey(AccROLE.id), nullable=True, autoincrement=False, primary_key=True, index=True) id_accACTION = db.Column(db.Integer(15, unsigned=True), db.ForeignKey(AccACTION.id), nullable=True, autoincrement=False, primary_key=True, index=True) id_accARGUMENT = db.Column(db.Integer(15), db.ForeignKey(AccARGUMENT.id), nullable=True, primary_key=True, autoincrement=False, index=True) argumentlistid = db.Column(db.MediumInteger(8), nullable=True, autoincrement=False, primary_key=True) role = db.relationship(AccROLE, backref='authorizations') action = db.relationship(AccACTION, backref='authorizations') argument = db.relationship(AccARGUMENT, backref='authorizations')
class BsrMETHODDATABUCKET(db.Model): """Represent a BsrMETHODDATABUCKET record.""" __tablename__ = 'bsrMETHODDATABUCKET' id_bsrMETHOD = db.Column(db.MediumInteger(9, unsigned=True), db.ForeignKey(BsrMETHOD.id), autoincrement=False, primary_key=True, nullable=False) bucket_no = db.Column(db.TinyInteger(2), primary_key=True, nullable=False, autoincrement=False) bucket_data = db.Column(db.LargeBinary) bucket_last_value = db.Column(db.String(255)) last_updated = db.Column(db.DateTime) method = db.relationship(BsrMETHOD, backref=db.backref( "buckets", collection_class=attribute_mapped_collection("bucket_no"), cascade="all, delete-orphan" ) ) @property def data(self): """Return bucket data as intbitset.""" return intbitset(self.bucket_data)
class CrcITEM(db.Model): """Represents a CrcITEM record.""" def __init__(self): pass __tablename__ = 'crcITEM' barcode = db.Column(db.String(30), nullable=False, server_default='', primary_key=True) id_bibrec = db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(Bibrec.id), nullable=False, server_default='0') id_crcLIBRARY = db.Column(db.Integer(15, unsigned=True), db.ForeignKey(CrcLIBRARY.id), nullable=False, server_default='0') collection = db.Column(db.String(60), nullable=True) location = db.Column(db.String(60), nullable=True) description = db.Column(db.String(60), nullable=True) loan_period = db.Column(db.String(30), nullable=False, server_default='') status = db.Column(db.String(20), nullable=False, server_default='') expected_arrival_date = db.Column(db.String(60), nullable=False, server_default='') creation_date = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00') modification_date = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00') number_of_requests = db.Column(db.Integer(3, unsigned=True), nullable=False, server_default='0')
class Bibfmt(db.Model): """Represent a Bibfmt record.""" __tablename__ = 'bibfmt' id_bibrec = db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(Bibrec.id), nullable=False, server_default='0', primary_key=True, autoincrement=False) format = db.Column(db.String(10), nullable=False, server_default='', primary_key=True, index=True) kind = db.Column(db.String(10), nullable=False, server_default='', index=True) last_updated = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00', index=True) value = db.Column(db.iLargeBinary) needs_2nd_pass = db.Column(db.TinyInteger(1), server_default='0') bibrec = db.relationship(Bibrec, backref='bibfmt')
class CmtNOTECOLLAPSED(db.Model): """Represents a CmtNOTECOLLAPSED record.""" __tablename__ = 'cmtNOTECOLLAPSED' id = \ db.Column(db.Integer(15, unsigned=True), primary_key=True, autoincrement=True, nullable=False, unique=True) id_bibrec = \ db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(Bibrec.id), primary_key=False, nullable=False, unique=False) # e.g., P1-F2 is the path for a note on Page 1, Figure 2 path = \ db.Column(db.Text, primary_key=False, nullable=False, unique=False) id_user = \ db.Column(db.Integer(15, unsigned=True), db.ForeignKey(User.id), primary_key=False, nullable=False, unique=False)
class CrcPURCHASE(db.Model): """Represents a CrcPURCHASE record.""" def __init__(self): pass __tablename__ = 'crcPURCHASE' id = db.Column(db.Integer(15, unsigned=True), nullable=False, primary_key=True, autoincrement=True) id_bibrec = db.Column(db.MediumInteger(8, unsigned=True), db.ForeignKey(Bibrec.id), nullable=False, server_default='0') id_crcVENDOR = db.Column(db.Integer(15, unsigned=True), db.ForeignKey(CrcVENDOR.id), nullable=False, server_default='0') ordered_date = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00') expected_date = db.Column(db.DateTime, nullable=False, server_default='1900-01-01 00:00:00') price = db.Column(db.String(20), nullable=False, server_default='0') status = db.Column(db.String(20), nullable=False, server_default='') notes = db.Column(db.Text, nullable=True) bibrec = db.relationship(Bibrec, backref='purchases') vendor = db.relationship(CrcVENDOR, backref='purchases')