安裝用到的包
pip install pymysql
pip install sqlalchemy
pip install alembic
alembic和git類似,是一個版本控制的東西,執行它的命令,前面必須加alembic
寫一個py文件,創建一個表
from sqlalchemy import Column, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 連接數據庫
engine = create_engine('mysql+pymysql://root:[email protected]:3306/p2p')
Base = declarative_base()
class My_Table(Base):
# 表名
__tablename__ = 'RRDXinPlanList'
# 字段
id = Column(String(20), primary_key=True)
amount = Column(String(20))
earnInterest = Column(String(20))
expectedYearRate = Column(String(20))
fundsUseRate = Column(String(20))
planId = Column(String(20))
name = Column(String(20))
status = Column(String(20))
subpointCountActual = Column(String(20))
PlanList.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)
以上代碼執行後,就會創建數據表,接下來,我在逐行講解一下具體的內容分別是什麼,首先是引入了sessionmaker,Session的主要目的是建立與數據庫的會話,它維護你加載和關聯的所有數據庫對象。它是數據庫查詢(Query)的一個入口。
在Sqlalchemy中,數據庫的查詢操作是通過Query對象來實現的。而Session提供了創建Query對象的接口
在我們創建了My_Table這個類以後,我們使用了 .metadata.create_all()這個方法,並將engine作爲參數傳入(engine是連接數據庫的方法),你也可以直接使用父類Base的方式將多個表同時創建,例如Base.metadata.create_all(engine) 。
接下來在來說My_Table 裏面的內容,自己創建類繼承自declarative_base()。在創建的時候,我們會默認給類加一個表名。(__tablename__)
alembic 初始化和配置
完成 pip 安裝之後
-
在 shell 裏面 cd 到項目根目錄執行
alembic init alembic
-
用 pycharm 把生成的文件 download 回來(包括
alembic
目錄和alembic.ini
) -
修改
alembic.ini
設置數據庫連接。
sqlalchemy.url = driver://user:pass@localhost/dbname
-
在
env.py
中設置,將target_metadata賦值成數據庫的元數據(metadata)
如果執行 revision 有 import 報錯,注意是否正確將當前項目目錄添加到 sys.path 路徑
# 修改:
target_metadata=None
# 修改爲:
# 方式1:
import os
import sys
root = os.path.dirname(__file__)+'/../../' # 定位到project根目錄
print root
sys.path.append(root)
from myapp import db
target_metadata = db.metadata
# 方式2:
import sys
from os.path import abspath, dirname
sys.path.append(dirname(dirname(abspath(__file__))))
from modules.models import Base
target_metadata = Base.metadata
基於數據庫 model 定義進行更新
將 model 定義好,並確認在 env.py 裏導入的 Base 類是在 model 定義的地方的
-
配置完成執行( -m “註釋信息”,根據情況更改,會用到生成的py文件名字裏)
alembic revision -m “create_user_table”
這裏可以看到虛擬機目錄在 alembic/versions 裏生成了 py 文件,檢查確認更新的內容,然後執行
alembic upgrade head
這樣就會更新 mysql 數據庫了