from flask import Flask,session
from flask_sqlalchemy import SQLAlchemy
import config app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app) class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(100),nullable=False) class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
title = db.Column(db.String(100),nullable=False)
content = db.Column(db.Text,nullable=False)

# 关联表,这里要与相关联的表的类型一直, user.id 表示关联到user表下的id字段
author_id = db.Column(db.Integer,db.ForeignKey('user.id'))
  
   #给这个article模型添加一个author属性(关系表),User为要连接的表,backref为定义反向引用
author = db.relationship('User',backref=db.backref('articles'),lazy='dynamic')  #lazy表示禁止自动查询
db.create_all() @app.route('/')
def index():
  #添加数据
user1 = User(username="test_flask2")
db.session.add(user1)
article = Article(title='eeee',content='cfffff',author_id=1)      #注意,这里的author_id必须存在,即user表下的id字段的内容必须存在
db.session.add(article)
db.session.commit()    #查询数据---常规方法
article = Article.query.filter(Article.title=="eeee").first()
author_id = article.author_id user = User.query.filter(User.id==author_id)      #获取user表的所有数据
print (user.username)                   #获取User表下的username字段的内容

#通过sqlalchemy实现查询数据
   article = Article.query.filter(Article.title=="eeee").first()
   print (article.author.username)              #打印username字段的内容, user = User.query.filter(User.username=="test_flask3").first()
   print (user.articles)        #查询所有的文章(结果为列表),这里需要注意的是这里的articles要与 article表下author字段里的backref设定的articles 字符串相同
return 'Hello World!' if __name__ == '__main__':
app.run(host='192.168.132.130',debug=True)

示例:

#!/usr/bin/env python
#-*-coding:utf-8-*- import datetime
from movie_project import db #用户
class User(db.Model):
__tablename__ ="user"
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(100),nullable=False,unique=True) #unique代表不能重复,唯一的
pwd = db.Column(db.String(100),nullable=False)
email = db.Column(db.String(64),nullable=False,unique=True)
phone = db.Column(db.String(11),nullable=False,unique=True)
info = db.Column(db.Text)
face = db.Column(db.String(100)) #头像
addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now)
uuid = db.Column(db.String(255)) userlogs = db.relationship('UserLog',backref='user') #外键关系关联
comments = db.relationship('Comment',backref='user')
movicols = db.relationship('Moviecol', backref='user') def __repr__(self): #定义返回的类型
return '<user %r>' % self.name def check_pwd(self,pwd):
from werkzeug.security import check_password_hash
return check_password_hash(self.pwd,pwd) #登录日志
class UserLog(db.Model):
__tablename__ = 'userlog'
id = db.Column(db.Integer,primary_key=True)
user_id = db.Column(db.Integer,db.ForeignKey('user.id'))
ip = db.Column(db.String(30))
addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now) def __repr__(self):
return '<userlog %r>' % self.id #标签数据模型 class Tag(db.Model):
__tablename__ = 'tag'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(100),unique=True)
addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now)
movies = db.relationship('Movie',backref='tag')
def __repr__(self):
return '<tag %r>' % self.name #电影模型 class Movie(db.Model):
__tablename__ = 'movie'
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(20),unique=True)
url = db.Column(db.String(255),unique=True) #地址
info = db.Column(db.Text) #简介
logo = db.Column(db.String(255),unique=True) #封面
star = db.Column(db.SmallInteger) #星级
playnum = db.Column(db.BigInteger) #播放量
commentnum = db.Column(db.BigInteger) #评论量
tag_id = db.Column(db.Integer,db.ForeignKey('tag.id'))
area = db.Column(db.String(255)) #上映地区
replease_time = db.Column(db.Date) #上映时间
length = db.Column(db.String(100))
addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now) comments = db.relationship('Comment',backref='movie')
moviecols = db.relationship('Moviecol', backref='movie') def __repr__(self):
return '<movie %r>' % self.title class Preview(db.Model):
__tablename__ = 'preview'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(20), unique=True)
logo = db.Column(db.String(255), unique=True)
addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now)
def __repr__(self):
return '<preview %r>' % self.title #评论 class Comment(db.Model):
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.Text)
movie_id = db.Column(db.Integer,db.ForeignKey('movie.id'))
user_id = db.Column(db.Integer,db.ForeignKey('user.id'))
addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now)
def __repr__(self):
return '<content %r>' % self.content #电影收藏 class Moviecol(db.Model):
__tablename__ = 'moviecol'
id = db.Column(db.Integer, primary_key=True)
movie_id = db.Column(db.Integer, db.ForeignKey('movie.id'))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self):
return '<Moviecol %r>' % self.id #权限及角色数据模型 class Auth(db.Model):
__tablename__ = 'auth'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20),unique=True) #权限名称
url = db.Column(db.String(255),unique=True)
addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self):
return '<auth %r>' % self.name #角色模型
class Role(db.Model):
__tablename__ = 'role'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20), unique=True) # 权限名称
auths = db.Column(db.String(600))
addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self):
return '<Role %r>' % self.name #管理员数据模型
class Admin(db.Model):
__tablename= 'admin'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False, unique=True) # unique代表不能重复,唯一的
pwd = db.Column(db.String(100), nullable=False)
is_super = db.Column(db.SmallInteger) #是否为超级管理员
role_id = db.Column(db.Integer,db.ForeignKey('role.id'))
addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) adminlogs = db.relationship('Adminlog',backref='admin')
adminoption = db.relationship('Oplogs', backref='admin') def __repr__(self):
return '<Admin %r>' % self.name def check_pwd(self,pwd):
from werkzeug.security import check_password_hash
return check_password_hash(self.pwd,pwd)
#管理员登录日志 class Adminlog(db.Model):
__tablename__ = 'adminlog'
id = db.Column(db.Integer, primary_key=True)
admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))
ip = db.Column(db.String(30))
addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self):
return '<Admin %r>' % self.name #操作日志 class Oplogs(db.Model):
__tablename__ = 'oplogs'
id = db.Column(db.Integer, primary_key=True)
admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))
ip = db.Column(db.String(30))
reason = db.Column(db.String(600)) #操作原因
addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self):
return '<oplog %r>' % self.id if __name__ == '__main__':
db.create_all()
# from werkzeug.security import generate_password_hash
# role = Role(
# name="超级管理员",
# auths = ''
# )
# admin = Admin(
# name="test",
# pwd=generate_password_hash("test"),
# is_super=0,
# role_id=1
# )
# db.session.add(role)
# db.session.add(admin)
# db.session.commit()

sqlalchemy 查询过滤器

flask SQLALchemy外键及约束的更多相关文章

  1. sqlalchemy外键和relationship查询

    前面的文章中讲解了外键的基础知识和操作,上一篇文章讲解了sqlalchemy的基本操作.前面两篇文章都是作为铺垫,为下面的文章打好基础.记得初一时第一次期中考试时考的不好,老爸安慰我说:“学习是一个循 ...

  2. SQL Server修改主、外键和约束

    0.创建表 create table Users ( Id int, Name ), Phone ), Email ), Role_Id uniqueidentifier ) go create ta ...

  3. oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息

    来源于网上整理 总结了一下oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下,希望对大家有所帮助: 1.查询出所有的用户表select * fro ...

  4. 吃货眼中的sqlalchemy外键和连表查询

    前言 使用数据库一个高效的操作是连表查询,一条查询语句能够查询到多个表的数据.在sqlalchem架构下的数据库连表查询更是十分方便.那么如何连表查询?以及数据库外键对连表查询有没有帮助呢?本篇文章就 ...

  5. MYSQL - 外键、约束、多表查询、子查询、视图、事务

    MYSQL - 外键.约束.多表查询.子查询.视图.事务 关系 创建成绩表scores,结构如下 id 学生 科目 成绩 思考:学生列应该存什么信息呢? 答:学生列的数据不是在这里新建的,而应该从学生 ...

  6. 【Flask】Sqlalchemy 外键

    ### 外键:使用SQLAlchemy创建外键非常简单.在从表中增加一个字段,指定这个字段外键的是哪个表的哪个字段就可以了.从表中外键的字段,必须和父表的主键字段类型保持一致.示例代码如下: from ...

  7. MySQL基础 - 外键和约束

    在工作中经常会遇到不少不同的观点,比如对于数据库来说那就是是否要设置外键,设置外键的理由自然不必多说,而不设置外键的理由多半为设置外键影响性能,但就目前工作来讲,还没有涉及到因为外键而引发的数据库瓶颈 ...

  8. 经典SQL语句大全_主外键_约束

    一.基础(建表.建约束.关系) 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整 ...

  9. sql语句添加删除外键及其约束

    --删除外键 ALTER TABLE t_base_role_module DROP CONSTRAINT fk_t_base_role_module_t_base_defined_url; --增加 ...

随机推荐

  1. 第十九天 标准目录与time 模块

      今日内容 1.目录规范 ***** (1)文件夹的规范写法 bin 可执行文件 conf 配置文件 core 主要业务逻辑 db 数据文件 lib 库 (公共代码 第三方模块) log 日志文件 ...

  2. HDU3507-Print Article-斜率dp入门题

    为了学CDQ分治,从斜率dp和凸包开始做吧.. 代码就是维护一个凸包.利用递增的性质丢掉不合适的点. http://www.cnblogs.com/Rlemon/p/3184899.html 代码学的 ...

  3. 「AtCoder Grand018A」Getting Difference(GCD)

    题目链接A - Getting Difference 题意 有n(1~\(10^5\))个数\(A_i\) (1~\(10^9\)),每次选两个数,将它们的差的绝对值加入这堆数.问k(1~\(10^9 ...

  4. Android热点回顾第一期

    本文由 ImportNew - 陈强 翻译自 androidweekly.如需转载本文,请先参见文章末尾处的转载要求. Importnew注:欢迎Android爱好者参与翻译文中提及的教程,请私信联系 ...

  5. HDU-6370 Werewolf(杭电多校6I)

    一群人在玩狼人杀,村民只会说真话,狼人会说真话和假话,要你求出那些人一定是村民或者那些人一定是狼人.想到了并查集不会用... 1,如果全部人都是狼人,一定可以所以一定是村民的人一定是0. 2, 加入是 ...

  6. centos7破解安装jira6.3.6(含Agile)

    应用场景:JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪 和敏捷管理等工作领域. 安装环境:centos7.3虚拟机 ...

  7. js原生事件系统与坐标系统

    今天来实现一个可兼容的js原生拖拽,在这里面我将会讲到: 1.封装兼容性的事件系统. 2.封装得到鼠标当前位置的系统. 3.完成拖拽的实现. 首先,我们要讲到鼠标位置的获取,讲到这个,就离不开js的w ...

  8. BZOJ2940 条纹

    条纹游戏是一个双人的游戏.所需要的物品有一个棋盘以及三种颜色的长方形条纹,这三种颜色分别是红色.绿色和蓝色.所有的红色条纹的尺寸是c*1,所有的绿色条纹的尺寸是z*1,所有的蓝色条纹的尺寸是n*1,这 ...

  9. 解决在vue中axios请求超时的问题

    查看更多精彩内容请访问我的新博客:https://www.cssge.com/ 自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,如果服务器或者网络不稳定掉包了, 你们 ...

  10. 使用jquery.pjax实现SPA单页面应用

    前面文章介绍了前端路由简单实现和Pjax入门方面的文章,今天来分享一个单页面应用神器jquery.pjax.js. HTML 我们准备一个加载div#loading,默认隐藏,ajax请求的时候才显示 ...