环境说明
Centos7 + python3.6 + mysql5.7
1.安装Flask-SQLAlchemy,pymyql驱动
pip install flask-sqlalchemy
pip intall pymysql
2.使用Flask-SQLAlchemy
Flask-SQLAlchemy数据库URL
常用的数据库引擎:
MySql |
mysql+pymysql://username:password@host/database |
Postgres |
postgresql://username:password@host/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列常见参数
autoincrement |
True 是否自增 |
primary_key |
True 是否是主键 |
indexE |
TRUE 是否是索引 |
unique |
True 是否是唯一 |
nullable |
True 是否允许字段为空 |
default |
默认值 |
4.字段类型
Integer |
int |
常规整型,通常为32位 |
SmallInteger |
int |
短整型,通常为16位 |
BigInteger |
int或long |
精度不受限整型 |
Float |
float |
浮点型 |
Numeric |
decimal |
定点数 |
String |
str |
可变长度字符串 |
Text |
str |
可变长度字符串,适合大量文本 |
Unicode |
unicode |
可变长度Unicode字符串 |
Boolean |
bool |
布尔值 |
Date |
datetime.date |
日期类型 |
Time |
datetime.time |
时间类型 |
DateTime |
datetime.datetime |
日期时间类型 |
Interval |
datetime.timedate |
时间间隔 |
Enum |
str |
字符列表 |
PickleType |
任意Python对象 |
自动Pickle序列化 |
LargeBinary |
str |
二进制 |
5.使用sqlalchemy
from app import db
#创建模型对象
class User(db.Model):
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()
删除所有
db.drop_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()