会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132446个问题
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 16711楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 16712楼

老师你好

1.89,96行中的first()这个方法能获取到数据的第一条用户信息,可为什么能在不同的类里面把这个信息打印在__repr__这个方法呢?


from sqlalchemy  import  create_engine,Column,Integer,String,Float,DECIMAL,Boolean,Enum,Date,DateTime,Time,Text
from sqlalchemy import func,and_,or_,ForeignKey
from  sqlalchemy.ext.declarative  import  declarative_base
from sqlalchemy.dialects.mysql import  LONGTEXT
from sqlalchemy.orm  import  sessionmaker,relationship
from datetime import date,datetime,time
#在python 3.x中  有enum模块
import  enum
import random

#准备连接数据库基本信息
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = '123456'

#dialect+driver://username:password@host:port/database?charset=utf8
#按照上述的格式来 组织数据库信息
DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

#创建数据库引擎
engine = create_engine(DB_URI)

Base = declarative_base(engine)
session = sessionmaker(engine)()

# 主表 / 从表
# user/news
class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key=True,autoincrement=True)
    uname = Column(String(50),nullable=False)

    # 添加属性   优化2表查询操作
    # newss=relationship('News')

    def __repr__(self):
        return "<User(uname:%s)>" % self.uname

class News(Base):
    __tablename__ = 'news'
    id = Column(Integer,primary_key=True,autoincrement=True)
    title = Column(String(50),nullable=False)
    content = Column(Text,nullable=False)
    #SQLALchemy实现外键的方法
    uid = Column(Integer,ForeignKey("user.id"))  #默认删除策略为 :RESTRICT

    # 添加属性  优化2表查询操作
    # 正向
    # author = relationship("User")
    # 最终:会把正向   和反向  关系 写在一起
    author = relationship("User", backref="newss")
    def __repr__(self):
        return "<News(title:%s,content=%s)>" % (self.title,self.content)

#创建表
# Base.metadata.drop_all()
# Base.metadata.create_all()
#
#
# #添加测试数据
# user = User(uname='momo')
# session.add(user)
# session.commit()
#
# news1= News(title='AAA',content='123',uid=1)
# news2= News(title='BBB',content='456',uid=1)
# session.add_all([news1,news2])
# session.commit()

#需求1:查询谋篇新闻的 作者
# news=session.query(News).first()
# print(news)
# print(news.uid) #拿到这篇新闻是哪个id用户写的  1
# user=session.query(User).get(news.uid)    #把uid当作外键给主键当作查询参数
# print(user)
# print('新闻的用户名为:',user.uname)
print('-'*50)

#结论:上述代码操作能实现需求,但是操作太麻烦,可以引入基于ORM模型的relationpship进行优化  (查询功能优化)
#需求1:查询谋篇新闻的 作者  (写法二)
news=session.query(News).first() #获取到新闻的第一条数据
print(news)
print(news.author)
print('新闻的用户名为:',news.author.uname)

print('-'*50)
#需求2:查询xx作者的所有新闻
user=session.query(User).first() #获取到用户的第一条数据
print(user.newss)


Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 16713楼
JAVA 全系列/第八阶段:Linux入门到实战/Linux(旧) 16716楼
JAVA 全系列/第八阶段:Linux入门到实战/Linux(旧) 16718楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/反射技术(旧) 16720楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/反射技术(旧) 16721楼
JAVA 全系列/(旧的隐藏)第二十一阶段:百战商城项目(Spring Cloud最新架构)/百战商城项目 16722楼
JAVA 全系列/(旧的隐藏)第二十一阶段:百战商城项目(Spring Cloud最新架构)/百战商城项目 16723楼
Python 全系列/第二十一阶段:Python_数据分析项目(旧)/二手车价格预测 16724楼
WEB前端全系列/第十九阶段:Vue2知识体系(旧)/可复用性 & 组合 16725楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637