以MySQL+SQLAlchemy的组合来对数据库进行管理,而Flask-SQLAlchemy是一种开发框架,对SQLAlchemy进行了一个简单的封装。下面使用Flask-SQLAlchemy的方法对数据库进行管理。

 

#config.py
#数据库配置信息
HOSTNAME = '127.0.0.1'    #
PORT     = '3306'
DATABASE = 'mydb'
USERNAME = 'root'
PASSWORD = 'wangjian'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)

#URI格式:dialect+driver://username:password@host:port/database
#URI格式:dialect+driver://username:password@host:port/database
# dialect是数据库的实现,比如MySQL、PostgreSQL、SQLite,并且转换成小写。
# driver是Python对应的驱动,如果不指定,会选择默认的驱动,比如MySQL的默认驱动是MySQLdb。
# username是连接数据库的用户名,
# password是连接数据库的密码,
# host是连接数据库的域名,
# port是数据库监听的端口号,
# database是连接哪个数据库的名字。

 

#app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import DB_URI


#需要安装依赖包 pymysql用来操作mysql、SQLAlchemy是数据库的ORM框架、Flask-SQLAlchemy是对SQLAlchemy的进一步抽象
#pip install pymysql
#pip install SQLAlchemy
#pip install flask-sqlalchemy


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI   #载入配置

#创建一个数据库引擎
db = SQLAlchemy(app)

#ORM类 与数据库表示映射关系
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %s>' % self.username


db.drop_all()    #删除所有表
db.create_all()  #创建所有表

#实例化一个ORM对象
admin = User(username='admin',email='admin@example.com')
guest = User('guest','guest@example.com')

#通过session来完成ORM到数据库表格的映射
# 添加记录
db.session.add(admin)
db.session.add(guest)
db.session.commit()

#查询数据库
# users = User.query.all()  #查询所有记录
# print( type(users) )
# for user in users:
#     print(user)

# user = User.query.get(2)     #get方法利用主键进行查询
# print(type(user.id))
# print(user.email)

# users = User.query.filter_by(username="guest").first()   # 使用条件过滤,最后得到一个记录的查询对象
# print(users.email)

users = User.query.all()  #查询所有记录
print( type(users) )    #打印删除记录中的email值
for user in users:
    print(user.email)

#删除操作
db.session.delete(guest)
db.session.commit()


users = User.query.all()  #查询所有记录
print( type(users) )    #打印删除记录中的email值
for user in users:
    print(user.email)

if __name__ == '__main__':
    app.run()
<class 'list'>
admin@example.com
guest@example.com
<class 'list'>
admin@example.com