flask框架操作MySQL資料庫
阿新 • • 發佈:2018-12-10
前言
經測試,id主鍵預設自動增長,Stringl型別對應MySQL資料庫中的varchar型別,外來鍵預設沒有觸發方式。
設定資料庫編碼為uft8,則預設編碼都為utf8。
示例
# -*- coding:utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
class Config(object):
"""配置引數"""
# sqlalchemy的配置引數
# 資料庫型別: mysql
# 使用者名稱: root
# 密碼: 123
# 地址: 127.0.0.1
# 埠: 3306
# 資料庫: test2
SQLALCHEMY_DATABASE_URI = "mysql://root: [email protected]:3306/test2"
# 設定sqlalchemy自動跟蹤資料庫
SQLALCHEMY_TRACE_MODIFICATIONS = True
app.config.from_object(Config) #新增配置
db = SQLAlchemy(app) #初始化資料庫(連線等操作)
# 建立資料庫模型類
class Role(db.Model): #角色
__tablename__ = "tbl_roles"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
users = db.relationship("User", backref="role") # 非資料庫中的欄位,方便查詢
def __repr__(self):
return "Role Object:name= %s" % self.name
class User(db.Model): #使用者
__tablename__ = "tbl_users" # 表名
id = db.Column(db.Integer, primary_key=True) # 主鍵
name = db.Column(db.String(64))
email = db.Column(db.String(64), unique=True)
password = db.Column(db.String(128))
role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id")) # 外來鍵
def __repr__(self):
return "User Object:name= %s" % self.name
if __name__ == "__main__":
db.drop_all() # 清除資料庫中的所有資料
db.create_all() # 建立資料庫模型類中的所有表
role1 = Role(name="admin") # 新增資料
role2 = Role(name="stuff")
db.session.add_all([role1, role2])
db.session.commit()
user1 = User(name="a", email=" [email protected]", password="abc", role_id=role1.id)
user2 = User(name="b", email="[email protected]", password="abc", role_id=role2.id)
user3 = User(name="c", email="[email protected]", password="abc", role_id=role2.id)
user4 = User(name="d", email="[email protected]", password="abc", role_id=role1.id)
db.session.add_all([user1, user2, user3, user4])
db.session.commit()
# 在終端操作資料庫
# from dbdemo import *
# 查詢
# r=Role.query.all()
# r[0],r[1]
# r[0].name,r[1].name
# u=User.query.get(3)
# u.name,u.email,u.role_id
# u=db.session.query(User).get(2)
# u.name
# user=User.query.get(1)
# user
# 更新方式1
# user.name="xm"
# db.session.add(user)
# db.session.commit()
# 更新方式2
# User.query.filter_by(name="c").update({"name":"python","email":" [email protected]"})
# db.session.commit()
# 刪除
# user=User.query.get(2)
# db.session.delete(user)
# db.session.commit()
測試結果
資料庫模型圖
資料庫表結構(部分)