经过这个小项目算是对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时会遇到的一些大坑 !的更多相关文章

  1. 创建本地数据库mySQL并连接JDBC

    转自: http://blog.csdn.net/wei_chong_chong/article/details/44830491 如何创建本地数据库MySQL并连接JDBC 转载 2015年04月0 ...

  2. Python Web开发中,WSGI协议的作用和实现原理详解

    首先理解下面三个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server ...

  3. python web框架 django工程的创建

    安装 django pip3 install django pip install django 安装完后出现这两个文件 django-admin 用来创建文件夹 在script目录 执行这个命令 d ...

  4. [Python之路] 实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦)

    本文描述如果简单实现自定义Web服务器与自定义简易框架,并且不断进行版本迭代,从而清晰的展现服务器与Web框架之间是如何结合.如何配合工作的.以及WSGI是什么. 本文帖的代码有点多,但基本每次迭代修 ...

  5. python web框架介绍对比

    Django Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django.要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善.市场占 ...

  6. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  7. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  8. python web框架——扩展Django&tornado

    一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...

  9. 2018年要学习的10大Python Web框架

    通过为开发人员提供应用程序开发结构,框架使开发人员的生活更轻松.他们自动执行通用解决方案,缩短开发时间,并允许开发人员更多地关注应用程序逻辑而不是常规元素. 在本文中,我们分享了我们自己的前十大Pyt ...

随机推荐

  1. android修改HOLO对话框风格

    andriod中修改对话框的风格,可以通过设置theme来实现,部分元素需要通过Java代码来修改,下面以修改对话框的标题为例说明各步骤. 1.编写一个文本样式. DIALOG的标题是一个textvi ...

  2. 【游戏周边】Unity,UDK,Unreal Engine4或者CryENGINE——我应该选择哪一个游戏引擎

    在digital-tutors看到的一篇文章,很多初学者都有这样的疑问,因此翻译到这里. 原文:http://blog.digitaltutors.com/unity-udk-cryengine-ga ...

  3. www-authenticate与BASE-64认证技术

    www-authenticate是一种简单的用户身份认证技术.很多验证都采用这种验证方式,尤其在嵌入式领域中.优点:方便缺点:这种认证方式在传输过程中采用的用户名密码加密方式为BASE-64,其解码过 ...

  4. Eclipse快捷键指南

    Eclipse快捷键指南 Eclipse快捷键,熟悉快捷键可以帮助开发事半功倍,节省更多的时间来用于做有意义的事情.Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行Ct ...

  5. C++ Primer 有感(标准库vector及迭代器)

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

  6. C++ Primer 有感(标准库map类型)

    map是键-值对的集合.map类型通常可以理解为关联数组:可以使用键作为下标获取一个值,正如内置数组一样.而关联的本质在于元素的值于某个特定的键相关联,而并非通过元素在数组中的位置获取. 1.map对 ...

  7. tomcat的realm域

    Realm域,其实可以看成是一个包含了用户及密码的数据库,而且每个用户还会包含了若干角色.也就是包含了用户名.密码.角色三个列的数据记录集合,如下图,最下面椭圆内的包含的整块即可以看成realm域.它 ...

  8. 开源视频平台:ViMP

    ViMP是一个开源的视频平台,可以用于建立自己的视频门户.可以用于VoD系统,网络学习系统,企业内部视频系统的搭建. 这一阵子一直在研究网络视频平台.发现这类的开源系统相对来说还是比较少的,因此在发现 ...

  9. 内存数据网格hazelcast的一些机制原理

    hazelcast作为一个内存数据网格工具,还算比较优秀,听说有Apache顶级项目使用它,值得研究下,使用文档可以直接看官方文档,但机制原理相关的资料基本没有,本人硬撸源码写的一些东西,跟大家分享一 ...

  10. InfiniDB 修改一行的效率?

    InfiniDB引擎的DML速度比较慢,无论设置自动提交开关为关闭或开启,插入性能都很糟糕,但更新和删除的效率还可以,并且不支持truncate表操作. 删,改 效率高 插入,效率低(测试,在数据量稍 ...