from random import randint
from sqlalchemy import Column,Integer,String,ForeignKey
from sqlalchemy.orm import relationship,backref
from db_util import Base,Session
class User(Base):
__tablename__ = 't_user'
id = Column(Integer, primary_key=True,autoincrement=True)
name = Column(String(32))
age = Column(Integer)
def __repr__(self):
return f'<User: id={self.id} name={self.name} age={self.age}>'
class News(Base):
__tablename__ = 't_news'
id = Column(Integer,primary_key=True,autoincrement=True)
title = Column(String(32),nullable=False)
content = Column(String(32),nullable=False)
read_count = Column(Integer)
uid = Column(Integer,ForeignKey('t_user.id'))
user = relationship('User',backref=backref('newss',lazy='dynamic'))
def __repr__(self):
return f'<News: id={self.id} title={self.title} content={self.content} read_count={self.read_count}>'
def create_data():
with Session() as ses:
for i in range(10):
user = User(name = f'name{i}',age = randint(6, 30))
ses.add(user)
for i in range(10):
news = News(title=f'title{i}',content=f'info{i}',read_count= randint(0,1000))
user.newss.append(news)
ses.commit()
def query_data():
with Session() as ses:
users = ses.query(User)
print(users)
print(type(users))
def query_data2():
with Session() as ses:
users = ses.query(User).all()
print(users[-1].newss)
print(type(users[-1].newss))
def query_data3():
# 'lazy = select 默认不能2次过滤'
with Session() as ses:
users = ses.query(User).all()
newss = users[-1].newss.filter(News.read_count >500 ).all()
print(newss)
if __name__ == '__main__':
# Base.metadata.drop_all()
# Base.metadata.create_all()
# create_data()
# query_data2()
query_data3()
没明白这段代码生成的uid为什么都是10