flask中MySQL外键_flask对数据库的外键 主键

近期一直在学flask框架,后悔当初没有好好学习数据库。一个外键的知识,真的是太。。。。蓝瘦香菇

创建数据库

class Users(db.Model):

__tablename__= 'users'id= db.Column(db.Integer ,primary_key=True ,nullable=False ,autoincrement=True)

username= db.Column(db.String(100) ,unique=True ,nullable=False)

class Archile(db.Model):

__tablename__= 'archile'id= db.Column(db.Integer,primary_key=True ,autoincrement=True)

title= db.Column(db.String(100) , unique=True )

content= db.Column(db.String(100) , unique=True, nullable=False)

author_id= db.Column(db.Integer ,db.ForeignKey('users.id'))

author= db.relationship('Users' , backref=db.backref('archiles'))

# 必须指明是大写的relationship()必须指明是大写的Users

db.create_all()

必须要有db.create_all()这个操作,才能够创建数据库,并且数据库中创建之后在代码里面修改是没有用的,要先删除,这样后来的代码才会进行执行。其实后面用到migrate这个库就可以是动态的实现数据的更新和删除了。

主键在一个数据表中只能有一个

外键在一个数据表中可以有多个,数据表通过外键可以连接到另一个数据表,但是前提是要存在另外一张数据表。

补一个有主键和外键的模型

classQuestion(db.Model):__tablename__ = 'question'id= db.Column(db.Integer , primary_key=True ,nullable=False , unique=True ,autoincrement=True)

title= db.Column(db.String(100), nullable=False)

content= db.Column(db.Text,nullable=False)

author_id= db.Column(db.Integer ,db.ForeignKey('user.id'))

create_time= db.Column(db.DateTime, default=datetime.now)#now方法是服务器第一次运行的时间

author = db.relationship('User' ,backref = db.backref('questios'))

这个模型中定义了authord_id为外键,通过author_id这个外键,我们能把question这个表连接到user表中。这样我们用user表中数据的时候就可以用author进行查询了。

我想查一个title==1的作者。

我就先查到title为1的数据表

question1 =  Question.query.filter(Question.title==1).first()

那么我们再进行连接到user表中的时候

author1 =  question.author

连接之后再进行查询

for i in author1 :

print(i.user)

这样就可以进行连接了。

-----------------------------------------菜鸡一枚,欢迎大佬指点留言-------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值