zoukankan      html  css  js  c++  java
  • 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)

    这样就可以进行连接了。

     

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

  • 相关阅读:
    [leetcode ]429. N-ary Tree Level Order Traversale (easy)
    [leetcode] 559. Maximum Depth of N-ary Tree (easy)
    [leetcode] 406. Queue Reconstruction by Height (medium)
    [leetcode] 238. Product of Array Except Self (medium)
    [leetcode] 94. Binary Tree Inorder Traversal
    [leetcode] 621. Task Scheduler(medium)
    [leetcode] 309. Best Time to Buy and Sell Stock with Cooldown(medium)
    为窗口设置图标
    关闭住主窗口
    窗口居中显示
  • 原文地址:https://www.cnblogs.com/Triangle-security/p/11218345.html
Copyright © 2011-2022 走看看