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这个库就可以是动态的实现数据的更新和删除了。

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

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

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

class Question(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)

这样就可以进行连接了。

 

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

posted @ 2019-08-01 17:32  你们的饭不好吃  阅读(926)  评论(0编辑  收藏  举报