from sqlalchemy import create_engine,MetaData
|
|
from sqlalchemy import Integer,String,ForeignKey,Column,TEXT
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy import PrimaryKeyConstraint,UniqueConstraint
|
|
import sqlalchemy
|
|
Base=declarative_base()
|
|
class con:
|
|
def connect():
|
|
'''Returns a connection and a metadata object'''
|
|
# We connect with the help of the PostgreSQL URL
|
|
|
|
url = 'postgresql://stu10205501415:Stu10205501415@dase-cdms-2022-pub.pg.rds.aliyuncs.com:5432/stu10205501415'
|
|
|
|
# The return value of create_engine() is our connection object
|
|
con = create_engine(url, client_encoding='utf8')
|
|
|
|
# We then bind the connection to MetaData()
|
|
meta = MetaData(bind=con)
|
|
|
|
return con, meta
|
|
|
|
|
|
class User(Base):
|
|
__tablename__ = 'user'
|
|
user_id = Column(TEXT, primary_key=True, comment="主键")
|
|
password = Column(TEXT, nullable=False, comment="密码")
|
|
balance = Column(Integer, nullable=False, comment="")
|
|
token = Column(TEXT, comment="缓存的令牌")
|
|
terminal = Column(TEXT, comment="终端代码")
|
|
|
|
class Store(Base):
|
|
__tablename__ = 'store'
|
|
store_id = Column(TEXT, primary_key=True,comment="主键")
|
|
stock_level = Column(Integer, comment = "货存")
|
|
|
|
class Store_Book(Base):
|
|
__tablename__ = 'store_book'
|
|
store_id = Column(TEXT, comment="主键")
|
|
book_id = Column(TEXT, comment="主键")
|
|
book_info = Column(TEXT, comment="书籍信息")
|
|
stock_level = Column(Integer, comment = "货存")
|
|
|
|
__table_args__ = (
|
|
PrimaryKeyConstraint('store_id', 'book_id'),
|
|
)
|
|
|
|
class User_Store(Base):
|
|
__tablename__ = 'user_store'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True, comment="主键")
|
|
|
|
fk_user_id = Column(
|
|
TEXT,
|
|
ForeignKey(
|
|
"user.user_id",
|
|
ondelete="CASCADE",
|
|
onupdate="CASCADE",
|
|
),
|
|
nullable=False,
|
|
comment="user外键"
|
|
)
|
|
fk_store_id = Column(
|
|
TEXT,
|
|
ForeignKey(
|
|
"store.store_id",
|
|
ondelete="CASCADE",
|
|
onupdate="CASCADE",
|
|
),
|
|
nullable=False,
|
|
comment="store外键"
|
|
)
|
|
# 多对多关系的中间表必须使用联合唯一约束,防止出现重复数据
|
|
__table_args__ = (
|
|
UniqueConstraint("fk_user_id", "fk_store_id"),
|
|
)
|
|
|
|
class New_Order(Base):
|
|
__tablename__ = 'new_order'
|
|
order_id = Column(TEXT, primary_key = True, comment = '订单id')
|
|
|
|
fk_user_id = Column(
|
|
TEXT,
|
|
ForeignKey(
|
|
"user.user_id",
|
|
ondelete="CASCADE",
|
|
onupdate="CASCADE",
|
|
),
|
|
nullable=False,
|
|
comment="user外键"
|
|
)
|
|
fk_store_id = Column(
|
|
TEXT,
|
|
ForeignKey(
|
|
"store.store_id",
|
|
ondelete="CASCADE",
|
|
onupdate="CASCADE",
|
|
),
|
|
nullable=False,
|
|
comment="store外键"
|
|
)
|
|
|
|
class New_Order_Detail(Base):
|
|
__tablename__ = 'new_order_detail'
|
|
order_id = Column(TEXT, comment='订单id')
|
|
book_id = Column(TEXT, comment='订单书籍')
|
|
count = Column(Integer, comment='购买书籍数')
|
|
price = Column(Integer, comment='单价')
|
|
|
|
__table_args__ = (
|
|
PrimaryKeyConstraint('order_id','book_id'),
|
|
)
|
|
|
|
engine, meta = con.connect()
|
|
|
|
Base.metadata.bind = engine
|
|
|
|
DBSession = sessionmaker(bind=engine)
|
|
|
|
session = DBSession()
|