Python-Web框架之 - 利用SQLALchemy创建与数据库MySQL的连接, 详解用Flask时会遇到的一些大坑 !
经过这个小项目算是对Django与Flask这两个web框架有了新的认识 , Django本身的轮子非常齐全 , 套路也很固定 , 新手在接触Django框架时 , 不会陷入到处找轮子的大坑 ;
那么在使用Flask这个框架的时候会碰到哪些大坑呢 , 首先Flask是一个轻量级的web框架 , 之所以说它轻量级是因为它本身并没有多少轮子 , 那是不是就代表这些轮子需要我们自己来造呢 , 那倒不必 , 但是需要我们去找这些轮子 , 这恰恰是锻炼你的思维的时候 , 你要找轮子之前 , 你必须得知道需要哪些轮子 , 这些轮子起到什么作用 , 知道了这些之后 , 进行下一步 ;
重点来了 , 这里所说的轮子到底是指什么呢 , 为什么说它坑呢 , Flask这个框架的文档和资料远没有Django那么丰富和清晰 , 你可能在网上能找到一些看似是你需要的资料 , 但是它很有可能里面用到的模块、驱动会有各种版本不一致的大坑 , 从东拼西凑来的轮子弄到一起可能会出现各种报错 , 这个时候你就得一个报错一个报错的解决 , 去查这个报错的原因 , 去查东拼西凑的模块的文档说明 , 这里要用到的MySQL驱动就有很多种版本 , PyMySQL、MySQLdb、mysql-connector、mysql-connector-python , 如果你选择MySQLdb , 那恭喜你这个是python2.x的版本 , 如果你选择了mysql-connector-python , 那又要恭喜你 ,这个只支持到python3.4 哈哈 , 如果选择PyMySQL , 虽然程序可以运行 , 但是会有各种警告之类的长串的红色字体 , 看着就很烦 , 经过实测选择mysql-connector不会有什么问题 ;
另外 , 还有一些使用数据库增删改查语句的坑 , 数据库语句可不像python语句那么干净 , 有些语句末尾要加分号 , 有些末尾又不需要加 , 有时候甚至还有对象单数和复数的区别 , 稍不留神儿你的语句就没效果或者报错 .
最后直接上源码和一些笔记吧...
# coding=utf-8
from flask import Flask
# SQLALchemy可以理解为python和数据库之间关联的工具
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)
# 配置数据库的地址URI , 格式 "数据库类型+数据库驱动名称://用户名:密码@机器地址:端口号/数据库名" , 端口号可以不写.
# python3中用的mysql驱动是mysql-connector , 已经不支持python2的MySQLdb驱动.
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+mysqlconnector://root:password@127.0.0.1/sql_demo"
# 跟踪数据库的修改 --> 不建议开启 , 一是消耗性能 , 二是未来的版本中会移除.
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
# 将app作为参数传入这个关联工具 , 创建一个两者相关联对象db
db = SQLAlchemy(app) # 创建数据库的模型 , 需要继承db.Model模型
class Role(db.Model):
"""创建角色类"""
# 定义表名
__tablename__ = "roles"
# 定义字段
# db.Column表示是一个字段 , db.Integer就代表id这个字段的数据类型是整数 , primary_key代表主键 , 是作为表的行的唯一标识.
# db.String代表是字符串类型 , 字符串长度定义个n个字节 , unique(唯一的) , unique=True代表这列不允许出现重复的值
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(100),unique=True)
# 在"一对多"的一中定义users_role属性 , 该属性不会出现在字段中 , 后面的backref="role"是给User反向引用的
# 由于是"一对多" , 所以"多"的地方用User参数 , "一"的地方用不加s的实例对象参数role
users_role = db.relationship("User",backref="role")
def __repr__(self):
"""返回定制对象输出信息 , 与__str__作用类似"""
return "Role:%d %s"%(self.id,self.name) class User(db.Model):
"""创建用户类"""
__tablename__ = "users"
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(100),unique=True)
password = db.Column(db.String(100)) # 每个人的密码不要求不同 , 可以不用指定unique=True
email = db.Column(db.String(100),unique=True)
role_id = db.Column(db.Integer,db.ForeignKey("roles.id")) # db.ForeignKey定义外键 , 参数是 表名.id
def __repr__(self):
"""返回定制对象输出信息 , 与__str__作用类似"""
return "User:%d %s %s %s"%(self.id,self.name,self.password,self.email) # 定义创建role和user实例对象的函数.
def role_user_make():
role1 = Role(name="admin")
role2 = Role(name="user")
db.session.add_all([role1,role2])
db.session.commit()
user1 = User(name="Tom", password="XYZ456", email="tom@163.com", role_id=role1.id)
user2 = User(name="Jack", password="CB_4321", email="jack@163.com", role_id=role2.id)
user3 = User(name="Alan", password="Zj@321", email="alan@163.com", role_id=role2.id)
user4 = User(name="Mark", password="", email="mark@163.com", role_id=role2.id)
db.session.add_all([user1,user2,user3,user4])
db.session.commit() @app.route("/")
def index():
return "hello world" if __name__ == '__main__':
# 删除表 , 在创建表之前先删除表
db.drop_all()
# 创建表
db.create_all()
role_user_make()
app.run(debug=True)
Python-Web框架之 - 利用SQLALchemy创建与数据库MySQL的连接, 详解用Flask时会遇到的一些大坑 !的更多相关文章
- 创建本地数据库mySQL并连接JDBC
转自: http://blog.csdn.net/wei_chong_chong/article/details/44830491 如何创建本地数据库MySQL并连接JDBC 转载 2015年04月0 ...
- Python Web开发中,WSGI协议的作用和实现原理详解
首先理解下面三个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server ...
- python web框架 django工程的创建
安装 django pip3 install django pip install django 安装完后出现这两个文件 django-admin 用来创建文件夹 在script目录 执行这个命令 d ...
- [Python之路] 实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦)
本文描述如果简单实现自定义Web服务器与自定义简易框架,并且不断进行版本迭代,从而清晰的展现服务器与Web框架之间是如何结合.如何配合工作的.以及WSGI是什么. 本文帖的代码有点多,但基本每次迭代修 ...
- python web框架介绍对比
Django Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django.要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善.市场占 ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
- python web框架——扩展Django&tornado
一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...
- 2018年要学习的10大Python Web框架
通过为开发人员提供应用程序开发结构,框架使开发人员的生活更轻松.他们自动执行通用解决方案,缩短开发时间,并允许开发人员更多地关注应用程序逻辑而不是常规元素. 在本文中,我们分享了我们自己的前十大Pyt ...
随机推荐
- XML解析之SAX解析过程代码详解
上一篇谢了解析原理和过程,这里应用代码直观认识这个原理: 新建Demo1类: import java.io.File; import javax.xml.parsers.SAXParser; impo ...
- STL:list用法详解
list容器介绍 相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间. ...
- Touch Handling in Cocos2D 3.x(五)
实现新英雄的放置功能 首先我们需要一个变量来保持我们当前移动英雄的引用,因此我们将添加一个私有实例变量.修改MainScene.m中的代码. 用: @implementation MainScene ...
- 【Android】自定义ListView的Adapter报空指针异常解决方法
刚刚使用ViewHolder的方法拉取ListView的数据,但是总会报异常.仔细查看代码,都正确. 后来打开adapter类,发现getView的返回值为null. 即return null. 将n ...
- (五十五)iOS多线程之GCD
GCD的全称为Grand Central Dispatch,翻译为大中央调度,是Apple开发的一个多线程编程解决方法. 进程和线程的概念: 正在进行中的程序被称为进程,负责程序运行的内存分配,每一个 ...
- 015-OC基础语法-OC笔记
学习目标 1.[了解]Objective-C语言简介 2.[掌握]第一个OC程序 3.[掌握]OC中的字符串 4.[熟悉]OC中的一些玩意 5.[了解]面向过程与面向对象 6.[掌握]类的声明和实现 ...
- Android开发中的安全
根据Android四大框架来解说安全机制 代码安全 java不同于C/C++,java是解释性语言,存在代码被反编译的隐患: 默认混淆器为proguard,最新版本为4.7: proguard还可用来 ...
- mtk camera 移植步骤
mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...
- ANDROID框架结构和介绍
下图是ANDROID4.4 版本包含的所有系统服务.本地服务和应用的框架图,组织为三层:应用层.系统服务层.本地进程和服务层.应用层通常通过服务提供的对外API接口(一个服务管理对象)与服务交互,系统 ...
- Android进阶(十八)AndroidAPP开发问题汇总(二)
Android进阶(十八)AndroidAPP开发问题汇总(二) 端口被占用解决措施: Android使用SimpleAdapter更新ListView里面的Drawable元素: http://ww ...