近期一直在学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)
这样就可以进行连接了。
-----------------------------------------菜鸡一枚,欢迎大佬指点留言-------------------------------------------------------------------