当前位置: 首页 > 工具软件 > SQLObject > 使用案例 >

python Flask 09 Flask基于DBUtils, sqlobject, SQLAlchemy实现数据库连接池

禹德水
2023-12-01

Flask连接数据库可以使用如下三种方式 :

Python DBUtils 提供了稳固的、持久的到数据库的连接池,支持多线程应用环境。参见

SQLObject 是一个流行的Python 数据库对象映射框架,映射的规则就是表->类、字段->属性

SQLAlchemy 是一个Python 的SQL 工具包以及数据库对象映射框架, 是三个数据库框架中功能最全的

一般而言,还是喜欢SQLAlchemy的连接数据库的代码,另外SQLAlchemy也是三个数据库框架中功能最全的,如果只是实现简单的数据库连接池,那么就用dbutils,如果使用ORM,那还是用SQLAlchemy;sqlobject就略过了。

DBUtils 连接数据库

SQLAlchemy连接数据库

本内容参考 Flask使用MySql数据库

也可以参考 Flask最强攻略 - 跟DragonFire学Flask - 第十四篇 Flask-SQLAlchemy

环境说明

Centos7 + python3.6 + mysql5.7

1.安装Flask-SQLAlchemy,pymyql驱动

pip install flask-sqlalchemy
pip intall pymysql

2.使用Flask-SQLAlchemy

Flask-SQLAlchemy数据库URL
常用的数据库引擎:

数据库引擎URL
MySqlmysql+pymysql://username:password@host/database
Postgrespostgresql://username:password@host/database
SQLitesqlite:绝对路径/database

app.py编辑

#导入模块
from flask_sqlalchemy import SQLAlchemy
import pymysql

#创建flask对象
app = Flask(__name__)

#配置flask配置对象中键:SQLALCHEMY_DATABASE_URI

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://username:password@hostname/database"

#配置flask配置对象中键:SQLALCHEMY_COMMIT_TEARDOWN,设置为True,应用会自动在每次请求结束后提交数据库中变动

app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = Ture
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

#获取SQLAlchemy实例对象,接下来就可以使用对象调用数据

db = SQLAlchemy(app)

3.sqlalchemy列常见参数

选择项说明
autoincrementTrue 是否自增
primary_keyTrue 是否是主键
indexETRUE 是否是索引
uniqueTrue 是否是唯一
nullableTrue 是否允许字段为空
default默认值

4.字段类型

类型名称python类型描述
Integerint常规整型,通常为32位
SmallIntegerint短整型,通常为16位
BigIntegerint或long精度不受限整型
Floatfloat浮点型
Numericdecimal定点数
Stringstr可变长度字符串
Textstr可变长度字符串,适合大量文本
Unicodeunicode可变长度Unicode字符串
Booleanbool布尔值
Datedatetime.date日期类型
Timedatetime.time时间类型
DateTimedatetime.datetime日期时间类型
Intervaldatetime.timedate时间间隔
Enumstr字符列表
PickleType任意Python对象自动Pickle序列化
LargeBinarystr二进制

5.query对象

query对象是sqlalchemy中的专门用于查询相关操作的对象,主要分为执行函数和过滤函数

  • 执行函数如下:
all()
first()
first_or_404()
get()
get_or_404()
count()
paginate()
  • 过滤函数
filter()
filter_by()
limit()
offset()
order_by()
group_by()

6.使用sqlalchemy

from app import db
#创建模型对象
class User(db.Model):
    __tablename__ = 'user'        # 数据库中的表名
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

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

# 1.创建表
db.create_all()

# 2.增加记录
admin = User(username='admin', email='admin@example.com')
guest = User(username='guest', email='guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()

#3.查询记录,注意查询返回对象,如果查询不到返回None
User.query.all() #查询所有
User.query.filter_by(username='admin').first()#条件查询
User.query.order_by(User.username).all()#排序查询
User.query.limit(1).all()#查询1条
User.query.get(id = 123)#精确查询

# 4.删除
user = User.query.get(id = 123)
db.session.delete(user)
db.session.commit()
 类似资料: