pip install flask-sqlalchemy
连接mysql:
pip install flask-mysqldb
安装了这个就可以在pip看见Flask-MySQLdb
,可以导入import pymysql
,create_app()
就可以使用db.init_app(app)
,就可以使用mysql了,如果没有安装会报ModuleNotFoundError: No module named 'MySQLdb'
这里超级超级无敌坑
pip install flask-sqlalchemy
连接mysql:
pip install flask-pymysql
flask_sqlalchemy和sqlalchemy的区别有哪些?
SQLAlchemy是python社区使用最广泛的ORM之一,SQL-Alchmy直译过来就是SQL炼金术。
Flask-SQLAlchemy集成了SQLAlchemy
from flask.ext.sqlalchemy impot SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
类型名 | MySQL类型 | python类型 | 描述 |
---|---|---|---|
SmallInteger | smallint | int | 取值范围较小,一般为16位 |
Integer | int | int | 普通整数,一般32位 |
BigInteger | bigint | int/long | 不限精度的整数 |
Float | float | float | 浮点数 |
Numeric | decimal | decimal.Decimal | 定点数 |
String | varchar | str | 变长字符串 |
Text | tinytext | str | 变长字符串,64K,2 16 − 1 2^{16}-12 16 −1=65535bytes |
Text(65536) | mediumtext | str | 变长字符串,max16M,2 24 − 1 2^{24}-12 24 −1=16777215bytes |
Text(16777216) | longtext | str | 变长字符串,max32M,2 32 − 1 2^{32}-12 32 −1=4294967295bytes |
LargeBinary | blob | str | 二进制文件,64K |
LargeBinary(65536) | mediumblob | str | 二进制,max16M |
LargeBinary(16777216) | longblob | str | 二进制,max32M |
PickleType | blob | 任何python对象 | 自动使用Pickle序列化,只有blob |
Unicode | varchar | unicode | 变长字符串 |
UnicodeText | text | unicode | 变长字符串,64K |
Boolean | tinyint | bool | 布尔值 |
Date | date | datetime.date | 日期 |
Time | time | date.time | 时间 |
DateTime | datetime | datetime.datetime | 日期和时间 |
Interval | datetime | datetime.timedelta | 时间间隔 |
Enum | enum | str | 一组字符串 |
from sqlalchemy.dialects.postgresql import JSON
class Data(db.Model):
__tablename__ = "datas"
id = db.Column(db.Integer, primary_key=True)
smallInteger = db.Column(db.SmallInteger)
bigInteger = db.Column(db.BigInteger)
floatData = db.Column(db.Float(10))
numericData = db.Column(db.Numeric(10))
stringData = db.Column(db.String(250))
textData = db.Column(db.Text(200))
mediumText = db.Column(db.Text(65536))
longText = db.Column(db.Text(16777216))
largeBinary = db.Column(db.LargeBinary(300))
mediumBlob = db.Column(db.LargeBinary(65536))
longBlob = db.Column(db.LargeBinary(16777216))
pickle = db.Column(db.PickleType)
mediumPickle = db.Column(db.PickleType(65536))
longPickle = db.Column(db.PickleType(16777216))
unicodeData = db.Column(db.Unicode(10))
unicodeText = db.Column(db.UnicodeText)
booleanData = db.Column(db.Boolean(0))
dateData = db.Column(db.Date)
timeData = db.Column(db.Time)
dateTime = db.Column(db.DateTime)
interval = db.Column(db.Interval)
enumData = db.Column(db.Enum('father', 'mother'))
tags = db.Column(JSON) # 对应mysql是JSON,查出来是dict直接用不需要json.loads()
def __repr__(self):
return "Data {}".format(self.id)