osdict_project/spider/omodels.py

57 lines
2.1 KiB
Python

from datetime import datetime
from sqlalchemy import create_engine, Column
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.sql.schema import ForeignKey
from sqlalchemy.sql.sqltypes import Boolean, DateTime, Integer, String
from normalutils.choices import StateType
oengine = create_engine("sqlite:///db.sqlite3", future=True)
Base = declarative_base()
OSession = sessionmaker(oengine, future=True)
class OWord(Base):
__tablename__ = "word_word"
id = Column("word_id", Integer, primary_key=True)
spelling = Column(String(64), nullable=False, unique=True)
importance = Column(String(32), nullable=True)
state = Column(String(2), default=StateType.CHECKING.value, nullable=False)
class OMeaningField(Base):
__tablename__ = "meaning_meaningfield"
id = Column("meaningfield_id", Integer, primary_key=True)
current_version = Column(Integer, default=1)
has_many = Column(Boolean, default=False)
word_id = Column(Integer, ForeignKey("word_word.word_id", ondelete="CASCADE"))
word = relationship("OWord", backref="meaningfields")
class OMeaning(Base):
__tablename__ = "meaning_meaning"
id = Column("meaning_id", Integer, primary_key=True)
meaningfield_id = Column(
Integer, ForeignKey("meaning_meaningfield.meaningfield_id", ondelete="CASCADE")
)
author_id = Column(Integer, nullable=True)
author_name = Column(String(64), nullable=True)
state = Column(String(2), default=StateType.CHECKING.value, nullable=False)
word_property = Column(String(8), nullable=False)
field = Column(String(64), nullable=True)
version = Column(Integer, default=1, nullable=False)
meaning = Column(String(128), nullable=False)
sentence = Column(String(256), nullable=True)
add_time = Column(DateTime, default=datetime.utcnow)
meaningfield = relationship("OMeaningField", backref="meanings")
if __name__ == "__main__":
with OSession() as session:
meaning = session.query(OMeaning).first()
print(meaning.meaningfield.word.id)