pip3 install flask-sqlalchemy pip3 intall pymysql
import pymysql from flask_sqlalchemy import SQLAlchemy
# 語法:app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:passwd@hostname[:port]/dbname?charset=utf8' app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:mysql@127.0.0.1:3306/myflask?charset=utf8'
app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = Ture app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)
class 類名(db.Model): #聲明表名,若是不指定,則默認表名爲小寫類名
__tablename__ = '表名'
#創建字段函數
字段名 = db.Column(字段類型,[參數]...) ... 例: class Students(db.Model):
'''學生表''' __tablename__ = 'stu' #默認表名爲小寫的類名即students,但能夠經過__tablename__屬性來設定
id = db.Column(db.Integer,primary_key=True,nullable=False) #主鍵默認自增,因此不須要再設置auto_increment參數
name = db.Column(db.String(20),nullable=False) age = db.Column(db.Integer) isDelete = db.Column(db.Boolean,nullable=False,default=False) class Subjects(db.Model):
'''學科表''' id = db.Column(db.Integer,primary_key=True,nullable=False) title = db.Column(db.String(20),unique=True,nullable=False) class Scores(db.Model):
'''成績表''' id = db.Column(db.Integer,primary_key=True,nullable=False) stu_id = db.Column(db.ForeignKey(Students.id),nullable=False) # 外鍵 sub_id = db.Column(db.ForeignKey(Subjects.id),nullable=False) score = db.Column(db.Integer,nullable=False)
字段類型 | 說明 |
Integer | 常規整型,一般爲32位 |
SmallInteger | 短整型,一般爲16位 |
BigInteger | 精度不受限整型 |
Float | 浮點型 |
Numeric | 小數 |
String | 可變長度字符串 |
Text | 可變長度字符串,適合大量文本 |
Unicode | 可變長度Unicode字符串 |
Boolean | 布爾類型 |
Date | 日期類型 |
Time | 時間類型 |
DateTime | 日期時間類型 |
Interval | 時間間隔,至關於datetime.timedelta |
Enum | 字符列表 |
PickleType | 自動Pickle序列化 |
LargeBinary | 二進制 |
參數 | 說明 |
autoincrement | 是否自增(True/False) |
primary_key | 是否主鍵 |
index | 是否創建索引 |
unique | 是否惟一 |
nullable | 是否容許爲null |
default | 設置默認值 |
db.ForeignKey(模型類名.id) | 建立外鍵約束 |
laowang = Students(name='老王',age=30) laozhang = Students(name='老張',age=35) db.session.add(laowang) db.session.add(laozhang) # db.session.add_all([laowang,laozhang]) 一次性添加包含全部記錄對象的列表
db.session.commit()
<模型類>.query.<過濾方法>.<查詢方法>
filter():使用指定的規則過濾記錄
filter_by():使用指定的規則過濾記錄(關鍵字表達式的形式)
order_by():根據指定條件對記錄進行排序
limit():限制查詢的條數
group_by():根據指定條件對記錄進行分組
off_set():使用指定的值偏移原查詢的結果
all(): 返回全部包含查詢記錄的列表
first(): 返回查詢的第一條記錄,未查到則返回None
one(): 返回第一條記錄,有且僅有一條記錄,不然報錯
get(id): 返回指定主鍵值的記錄,未查到則返回None
count(): 返回查詢結果的數量
one_or_none(): 有且僅有一條記錄,返回記錄,不然返回None
first_or_404(): 返回查詢的第一條記錄,未查到則報404錯誤
get_or_404(id): 返回指定主鍵值的記錄,未查到則報404錯誤
paginate(): 返回一個Pagination對象,能夠對記錄進行分頁處理
with_parent(類實例): 返回和這個實例相關聯的對象
from sqlalchemy import and_,or_,not_
Students.query.all() #查詢全部 包含全部記錄的列表
Students.query.filter_by(name='老張').first()#條件查詢,精確查詢
Students.query.filter(Students.name.endwith('王')).all()# 模糊查詢,返回名字以'王'結尾的全部數據。 Students.query.filter(Students.name!='老王').all()#邏輯非
Students.query.filter(not_(Students.name=='老王')).all()#取反
Students.query.filter(and_(Students.name=='老王',Students.age=20)).all() #邏輯與
Students.query.filter(or_(Students.name=='老王',Students.age==30)).all() #邏輯或
Students.query.order_by(Students.age).all()#排序查詢
Students.query.limit(1).all()#查詢1條
Students.query.get(id = 1)#精確查詢
stu = Students.query.first() stu.name = '老李' db.session.commit()
laowang = Students.query.filter_by(name='老王').first() db.session.delete(laowang) db.session.commit()