環境說明
Centos7 + python3.6 + mysql5.7
1.安裝Flask-SQLAlchemy,pymyql驅動
pip install flask-sqlalchemy
pip intall pymysql
2.使用Flask-SQLAlchemy
Flask-SQLAlchemy數據庫URL
常用的數據庫引擎:
| 數據庫引擎 |
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.字段類型
| 類型名稱 |
python類型 |
描述 |
| 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()
# 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()
6.具體實例代碼可以看我的git有個flask+requests爬取小說展示項目