57 lines
2.1 KiB
Python
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)
|