Flask 数据库 SQLAlchemy

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()

 

posted @ 2020-07-26 15:55  E1st  阅读(168)  评论(0编辑  收藏  举报