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 ...
随机推荐
- 《C语言点滴》书评
说起C语言方面的书,你最先想到的是哪一本?不论图书本身是好是坏,反正我想到的是谭浩强的<C程序设计>--它已然是一部"圣经"了.那么,为什么赵岩老师还要写一本<C ...
- DB Query Analyzer 6.04 is distributed, 78 articles concerned have been published
DB Query Analyzer 6.04 is distributed,78 articles concerned have been published DB Query Analyz ...
- 关于会话、进程、请求的几个常用SQL
1.检查自己的SID SELECT sid FROM v$session WHERE sid = (SELECT sid FROM v$mystat WHERE rownum = 1); 2. 几个I ...
- MinerDB.java 数据库工具类
MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...
- Android中显示gif动态图片
在android中显示一个静态图片比如png jpg等等都很方便,但是如果要显示一个gif 动态图片就需要进行一些处理. 本文是采用自定义view 然后进行重新onDraw方法来实现 首先自定义Vie ...
- Linux 开发环境搭建
本文多参考自网上资料,在此多谢这些资料的作者的辛勤劳动! 另外,本文所用 Linux 版本为 CentOS 7.1. 终端配置 安装及配置 Zsh 在默认情况下,Linux 下的终端是 bash,但其 ...
- ConcurrentHashMap和HashTable的区别
hashtable是做了同步的,hashmap未考虑同步.所以hashmap在单线程情况下效率较高.hashtable在的多线程情况下,同步操作能保证程序执行的正确性. 但是hashtable每次同步 ...
- Ext.Net_1.X_WINDOW遮罩层被GridPanel挡住
通过调试HTML代码,发现其实是DIV. chrome 中修改DIV Z:INDEX 就不被遮住了?但是又晓得如何修改window的Z:INDEX.那就修改"背景"GP的吧.
- 对Linux0.11 中 进程0 和 进程1分析
1. 背景 进程的创建过程无疑是最重要的操作系统处理过程之一,很多书和教材上说的最多的还是一些原理的部分,忽略了很多细节.比如,子进程复制父进程所拥有的资源,或者子进程和父进程共享相同的物理页面,拥有 ...
- Java进阶(十一)部分数据类型取值范围
java整型byte,short,int,long取值范围大小 在项目开发中,需要用到随机数的生成方法,代码如下: public static String randomizeNumber(int n ...