python web框架flask连接mysql数据库操作
最近在用flask框架做一个python web项目,其中要连接数据库,所以总结如下:
如何用pycharm快速创建一个flask项目我就不详细说了,可以先创建虚拟环境,不过大部分的事pycharm都帮你做好了.flask作为一个轻量型的web框架还是挺灵活的,不管小型还是大型项目,都可以用这个框架来构建.
首先在命令行用pip安装或者在pycharm里面安装数据库连接依赖包flask-sqlalchemy,python3中已经不再支持MySQLdb模块,所以要安装pymysql(pip安装或者在pycharm里面安装),如果在python3安装mysql-python会出现一个错误,搜一下改一下一个文件的名字应该就能解决,不建议安装mysql-python.安装flask-sqlalchemy和pymysql就够了
然后见代码:
models.py
# coding=utf-8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import pymysqlapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost:3306/dbname?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = Truedb = SQLAlchemy(app) # 实例化# 数据模型设计
# 会员数据模型
class User(db.Model):__tablename__ = "user"id = db.Column(db.Integer, primary_key=True) # 编号name = db.Column(db.String(100), unique=True) # 昵称pwd = db.Column(db.String(100)) # 密码email = db.Column(db.String(30), unique=True) # 邮箱phone = db.Column(db.String(11), unique=True) # 手机号码info = db.Column(db.Text) # 个人简介face = db.Column(db.String(255), unique=True) # 头像addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 注册时间uuid = db.Column(db.String(255), unique=True) # 唯一标志userlogs = db.relationship('Userlog', backref='user') # 会员日志外键关联comments = db.relationship('Comment', backref='user') # 电影评论外键关联moviecols = db.relationship('Moviecol', backref='user') # 电影收藏外键关联def __repr__(self):return "<User %r>" % self.name# 会员登录日志
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(100)) # 最近登录ipaddtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 最近登录时间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.utcnow) # 添加时间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(255), 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)) # 上映地区release_time = db.Column(db.Date) # 上映时间length = db.Column(db.String(100)) # 时长addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间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(255), unique=True) # 标题logo = db.Column(db.String(255), unique=True) # 封面addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间def __repr__(self):return "<Preview %r>" % self.title# 评论
class Comment(db.Model):__tablename__ = "comment"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.utcnow) # 添加时间def __repr__(self):return "<Comment %r>" % self.id# 收藏
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.utcnow) # 添加时间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(100), unique=True) # 名称url = db.Column(db.String(255), unique=True) # 地址addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间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(100), unique=True) # 名称auths = db.Column(db.String(1000), unique=True) # 权限列表addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间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), unique=True) # 管理员账号pwd = db.Column(db.String(100)) # 管理员密码is_super = db.Column(db.SmallInteger) # 是否是超级管理员,0为超级管理员,1不是role_id = db.Column(db.Integer, db.ForeignKey('role.id')) # 所属角色addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间adminlogs = db.relationship("Adminlog", backref='admin') # 管理员登录日志外键关联oplogs = db.relationship("Oplog", backref='admin') # 管理员操作日志外键关联def __repr__(self):return "<Admin %r>" % self.name# 管理员登录日志
class Adminlog(db.Model):__tablename__ = "adminlog"id = db.Column(db.Integer, primary_key=True) # 编号admin = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员ip = db.Column(db.String(100)) # 最近登录ipaddtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 最近登录时间def __repr__(self):return "<Adminlog %r>" % self.id# 后台操作日志
class Oplog(db.Model):__tablename__ = "oplog"id = db.Column(db.Integer, primary_key=True) # 编号admin = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员ip = db.Column(db.String(100)) # 最近登录ipreason = db.Column(db.String(600)) # 操作原因addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 最近登录时间def __repr__(self):return "<Oplog %r>" % self.iddb.create_all()
除了语法啥的,那些URI还是和C,JAVA一样,学的时候注意类推
运行完这个py文件以后,可以看到数据库(注意要先手动创建,SQLAlchemy不会自动帮忙建的)里面已经创建好表了
感觉和以前做javaweb项目一样,当时用的springboot框架,这种ORM框架可以根据代码自动映射数据库,然后完成数据库表的创建工作,原理都是一样的.
不知道为什么只有去掉所有外键和关联关系才可以将数据插入数据库:
from werkzeug.security import generate_password_hashadmin = Admin(name="admin",pwd=generate_password_hash("admin"),is_super=0,role_id=1
)
db.session.add(admin)
db.session.commit()
python web框架flask连接mysql数据库操作相关推荐
- yaf mysql_Yaf框架封装的MySQL数据库操作示例
本文实例讲述了Yaf框架封装的MySQL数据库操作.分享给大家供大家参考,具体如下: Yaf封装DB简单操作 介绍 因为Yaf是一个纯天然的MVC阔架,本人还在贝锐的时候就和主管一起用Yaf框架去重构 ...
- python使用PyMySQL的连接MySQL数据库
如何实现将100000条数据插入到MySQL数据库?如果使用MySQL客户端来完成这个操作,那么这个工作量无疑是巨大的,可以通过使用程序代码的方式去连接MySQL数据库,然后对MySQL数据库进行增删 ...
- java web项目中连接mysql数据库,javaweb之eclipse工程连接mysql数据库
javaweb之eclipse工程连接mysql数据库 准备工作: 1.在mysql官网下载mysqlconnection的jar包 输入网址:mysql.com-点击DOWNLOADS--下拉选择M ...
- c winform mysql类_C#连接MySQL数据库操作类
首先需要安装MySQL Connector Net 6.8.3 然后在项目中引用MySQL Connector,如下图所示 C#连接MySQL的操作类代码如下:public class MySQLHe ...
- python mss_Python实现的连接mssql数据库操作示例
本文实例讲述了python实现的连接mssql数据库操作.分享给大家供大家参考,具体如下: 1. 目标数据sql2008 r2 comprject=>testmodel 2. 安装python ...
- qtp 连接mysql_qtp 怎样连接mysql数据库操作_MySQL
1.首先安装mysql数据驱动,qtp在windows系统下操作连接mysql,所以下载mysql-connector-odbc- 5.1.8-win32.msi 下载地址:http://mysql. ...
- 十八、Express框架连接MySQL数据库操作
在上一篇中已经在Node.js中引入使用了mysql模块进行数据库的基本操作,在本篇当中在Express框架中来连接数据库以及操作数据库: Express 项目环境 这里是通过全局安装Express框 ...
- python web flask开发框架_零基础入门python web框架Flask开发
Flask框架是Python开发的一个基于Werkzeug和Jinja 2的web开发微框架,它的优势就是极其简洁,但又非常灵活,而且容易学习和应用.因此Flask框架是Python新手快速开始web ...
- Python Web框架——Flask
简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理 ...
最新文章
- 一文说通Blazor for Server-Side的项目结构
- 跨域产生的原因和解决方法_板式家具开料机加工过程产生崩边原因及解决方法...
- 测试面试题集-Python三局两胜小游戏
- 机器学习基础(四十五)—— 模拟退火(Simulated Annealing)
- 凌阳单片机c语言延时函数,凌阳单片机C语言(网站整理).doc
- 鸿蒙系统的正式推送范围,华为鸿蒙系统或6月正式推送升级,手机版已开始小范围推送...
- linux 音频源码输出,linux下使用ffmpeg将amr转成mp3
- 中国AI专利数稳居第一!世界各国AI专利深度盘点
- 使用 Electron 打印到 PDF
- Arcgis修改栅格数据像素值
- 永久性删除的文件怎么恢复,怎么还原文件
- 安科瑞ACX电瓶车智能充电桩,充满自停,多样支付,10路端口,安全保护
- win10 系统版本号获取的三种方法
- linux内核网络TIME_WAIT
- Linux中压缩解压工具使用
- 新的一年软件测试行业的趋势能够更好?
- HMC7044芯片配置总结
- CSDN PC端网站及其部分功能产品体验的一点分析
- toad关联oracle,配置toad远程连接oracle
- postgre数据库优缺点