第17课:Flask Mysql sqlalchemy ORM操作

FLASK MYSQL ORM操作
flask_sqlalchemy基本上已经成为ORM操作的标准
官方文档:http://docs.jinkan.org/docs/flask-sqlalchemy/quickstart.html

首先你需要安装flask_sqlalchemy(pip install安装)
MySQLdb模块(pip list显示出来的名字叫MySQL-python,源码下载地址:https://pypi.python.org/pypi/MySQL-python/1.2.5,安装一般会出现找不到mysql_config的错误
首先你需要本机上已经安装有mysql,找到对应mysql_config的路径,然后在mysql-python源码包下找到:setup_posix.py 文件,找到文件中的 mysql_config.path 将其值修改mysql_config.path = "/Applications/MAMP/Library/bin/mysql_config" 这里的路径是我本地对应文件的路径)

有人可能有疑问了,MySQLdb是什么?他是python操作mysql数据库的基础类,其实只要这一个模块就可以操作数据库,而flask_sqlalchemy是在此基础上的封装

举个例子:
首先在数据库中创建一个users表,2个字段,一个id (主键,自增)一个uname字段(用户名)

代码如下
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

#初始化
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost:3306/test?charset=utf8'#配置 sqlalchemy 数据库驱动 - 数据库用户名:密码@主机地址:端口/数据库?编码
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
db = SQLAlchemy(app)

#定义model
class Users(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    uname = db.Column(db.String(30), unique=True)

    def __init__(self, uname):
        self.id = id
        self.uname = uname

    def __repr__(self):
        return '<User %r>' % self.uname

#查询
#1.查询全部
res = Users.query.all()

#2.执行SQL查询
sql = 'select * from users limit 0, 10'
items = list()
#执行sql,返回值都是list(),要取值遍历,每一个直接通过'.字段名'的方式取指定的字段
items = db.session.execute(sql)

#3.条件查询
# 取出查询结果的第一条数据
# 实际上就是一个Users对象
# .all()是查询到的所有结果,结果是一个Users对象数组
result = Users.query.filter(Users.uname=='test1').first()
print(result.uname)

#增加数据
info = Users(uname="test2")
db.session.add(info)
db.session.commit()

#修改数据
result = Users.query.filter(Users.uname=='test1').first()
result.uname = 'test1_update'
db.session.commit()

#删除数据
# 查出要删除的数据
# 拿到Article对象
# db.session.delete(article)
# db.session.commit()
result = Users.query.filter(Users.uname=='test2').first()
db.session.delete(result)
db.session.commit()

单个表用ORM方式还是蛮方便的,但是,如果是多表联合操作,1对多,多对多这种,用flask_sqlalchemy整个人都是崩溃的有没有?
而且我觉得一个程序员多写SQL只有好处有没有?不要再给我扯什么ORM,那我们怎么搞?当然是用最基础的MySQLdb
具体教程见:http://www.godeye.org/lesson/132