Python 版本: 3.7.8
用 Pycharm 开发工具,新建项目,设置安装以下包:
1) Flask
2) Flask-SQLAchemy
3) PyMySql
### Flask-SQLAlchemy 的介绍与安装:
1. ORM: Object Relationship Mapping (模型关系映射)
2. flask-sqlalchemy 是一套 ORM 框架
3. ORM 的优势:简单方便地操作数据库,和操作对象类似。一个表抽象成一个类,一条数据抽象成该类的一个对象。
4. 安装 flask-sqlalchemy
### Flask-SQLAlchemy 的使用:
1. 初始化和设置数据库配置信息:
* 使用 flask_sqlalchemy 中的 SQLAlchemy 进行初始化:
1 from flask_sqlalchemy import SQLAlchemy 2 import config 3 4 app = Flask(__name__) 5 app.config.from_object(config) 6 db = SQLAlchemy(app)
2. 设置配置信息,在 'config.py' 文件中添加以下:
1 # dialect+driver://username:password@host:port/database 2 DIALECT = 'mysql' 3 DRIVER = 'pymysql' # 驱动程序在 python2 中是 mysqldb 4 USERNAME = 'pydev' 5 PASSWORD = 'syjinsari' 6 HOST = '192.168.0.110' 7 PORT = '3306' 8 DATABASE = 'py_demo' 9 10 SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE) 11 12 SQLALCHEMY_TRACK_MODIFICATIONS = False
3. 在主 app 文件中添加配置文件:
1 app = Flask(__name__) 2 app.config.from_object(config) 3 db = SQLAlchemy(app)
4. 测试连接,成功或者报错:
''' db.create_all() '''
连接失败可能来自多种原因,例如:
1)服务器防火墙把 3306 端口关闭了。
2)没有创建过用户,或者用户无法远程登录。
### 使用 Flask-SQLAlchemy 创建模型与表的映射:
1. 模型需要继承自 `db.Model` ,然后映射到表中的属性,必须写成 `db.Column`的数据类型。
2. 数据类型:db.Integer db.String db.Text
其他参数: primary_key autoincrement nullable
3. 最后调用 `db.create_all() 将模型真正创建到数据库中
class Article(db.Model): __tablename__ = 'article' id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) db.create_all()
### 数据增删改查
1 # 增: 2 article1 = Article(title='1st aaa',content='this is aaa') 3 db.session.add(article1) 4 # 事务 5 db.session.commit() 6 7 # 查 8 # select * from article where article.title = '1st aaa' 9 article1 = Article.query.filter(Article.title == '1st aaa').first() 10 print('title: %s' % article1.title) 11 print('content: %s' % article1.content) 12 13 # 改 14 # 1. 查到需要更改的行 2. 更改数据 3. 提交事务 15 article1 = Article.query.filter(Article.title == '1st aaa').first() 16 article1.title = 'new aaa' 17 db.session.commit() 18 19 20 # 删 21 # 1. 查到需要删除的行 2. 删除 3. 提交事务 22 article1 = Article.query.filter(Article.title == 'new aaa').first() 23 db.session.delete(article1) 24 db.session.commit()