SQLAlchemy

1. SQLAlchemy介紹

  SQLAlchemy是一個基於Python實現的ORM框架,能知足大多數數據庫操做需求,同時支持多種數據庫引擎(SQLite,MySQL,Postgresql,Oracle等)html

  SQLAlchemy組件中最有名的是它的對象關係映射器(ORM)python

  ORM 將數據庫中的表與面嚮對象語言中的類創建了一種對應關係mysql

  ORM將一個Python的對象映射爲數據庫中的一張關係表。它將SQL封裝起來,程序員再也不須要關心數據庫的具體操做,只須要專一於本身自己代碼和業務邏輯的實現程序員

  對數據表的抽象,容許開發人員首先考慮數據模型,同時使得Python程序更加簡潔易讀。
  對各類數據庫引擎的封裝,使得開發人員在面對不一樣數據庫時,只須要作簡單修改便可,工做量大大減小。sql

  總體的實現過程就是:Python代碼,經過ORM轉換成SQL語句,再經過pymysql去實際操做數據庫,最典型的ORM就是咱們的SQLAlchemy數據庫

2.使用

  SQLAlchemy自己沒法操做數據庫,必須依賴pymsql等第三方插件。根據配置文件的不一樣調用不一樣的數據庫API,從而實現對數據庫的操做flask

MySQL-Python
    mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
    
pymysql
    mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
    
MySQL-Connector
    mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
    
cx_Oracle
    oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
    

其餘可參考此處:http://docs.sqlalchemy.org/en/latest/dialects/index.htmlsession

 2.1 flask-sqlalchemyoracle

  常見咱們須要下載一個 Flask-SQLAlchemy擴展包app

官方文檔連接:猛戳此處

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 數據庫類型://用戶名:密碼(沒有密碼則爲空,不填)@數據庫主機地址/數據庫名?編碼
DB_URL = 'mysql+pymysql://root:@localhost/test?charset=utf8'

# 添加到全局配製中,這步必學要有
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)


class Parent(db.Model):
    __tablename__ = 'parent'
    id = db.Column(db.Integer, primary_key=True)
    par_name = db.Column(db.String(50), nullable=False)
    children = db.relationship("Child", backref="parent")
   # 在父表類中經過relationship() 方法來引用子表的類集合
   # 當咱們須要在父表中添加子表關係時使用 relationship,這樣子表將會在多對一的關係中經過.parent的方式得到父表的屬性


class Child(db.Model):
    __tablename__ = 'child'
    id = db.Column(db.Integer, primary_key=True)
    child_name = db.Column(db.String(50), nullable=False)
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))
    # 在子表類中經過 foreign key (外鍵)引用父表的參考字段


# db.drop_all()         #刪除表
# db.create_all()       #建立表


# 添加數據
# par1 = Parent(par_name='爸爸1')
# par2 = Parent(par_name='爸爸2')
# chi = Child(child_name='兒子1',parent_id=2)

# db.session.add(par1)
# db.session.add(par2)
# db.session.add(chi)
# db.session.commit()


# 查看數據
# par =Parent.query.all()
# print(par)  # [<Parent 1>, <Parent 2>]

# chi = Child.query.filter(Child.parent_id).first().child_name
# print(chi)  # 兒子1


# 修改數據
# chi = Child.query.filter(Child.parent_id).first()
# chi.child_name = "好兒子"
# db.session.commit()     # 刷新數據庫,能夠看見數據已經更新


# 刪除數據
# par =Parent.query.filter(Parent.id==1).first()
# db.session.delete(par)
# db.session.commit()     # 刷新數據庫,id=1的數據已經不存在


@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(port=5050)

最終的效果

也可參考本篇博文:博文連接

詳細操做參考:博文連接

 進階閱讀:參考知乎連接

相關文章
相關標籤/搜索