Python3 整合SQLAlchemy ORM 框架:實現MySQL 表初始化

在奮鬥的大道發表於2021-01-04

什麼是ORM

orm英文全稱object relational mapping,就是物件對映關係程式,簡單來說我們類似python這種物件導向的程式來說一切皆物件,但是我們使用的資料庫卻都是關係型的,為了保證一致的使用習慣,通過orm將程式語言的物件模型和資料庫的關係模型建立對映關係,這樣我們在使用程式語言對資料庫進行操作的時候可以直接使用程式語言的物件模型進行操作就可以了,而不用直接使用sql語言。


什麼是SQLAlchemy 

SQLAlchemy是python的ORM框架

安裝SQLAlchemy 框架,前提條件必須安裝PyMySQL 框架

pip install pymysql

再安裝SQLAlchemy 框架

pip install sqlalchemy

 

如何使用SQLAlchemy  連線MySQL資料庫並建立表

1、通過import 關鍵字,匯入依賴的包

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey

簡單說明匯入的包功能:

create_engine:建立資料庫引擎(連線mysql 資料庫核心)

Table:建立表

Column:建立表欄位

Integer:指定表欄位的資料型別(整形)

String:指定表欄位的資料型別(字串)

MetaData:後設資料型別

ForeignKey:指定表的外來鍵關係

2、建立一個資料庫引擎

engine = create_engine("mysql+pymysql://root:123456@localhost:3306/hotel", echo=True)

3、建立後設資料

metadata = MetaData(engine)

4、新增表結構資料

user = Table('user', metadata,
             Column('id', Integer, primary_key=True),
             Column('name', String(20)),
             Column('fullname', String(40))
             )
address_table = Table('address', metadata,
                      Column('id', Integer, primary_key=True),
                      Column('user_id', None, ForeignKey('user.id')),
                      Column('email', String(128), nullable=False)
                      )

5、執行表建立

metadata.create_all()

注意:在第四步時已經將表結構存到了metadata裡面,然後讓metadata執行create_all()方法,這樣就向指定的資料庫裡建立了user和address表。

6、完整的功能原始碼:

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey


engine = create_engine("mysql+pymysql://root:123456@localhost:3306/hotel", echo=True)
metadata = MetaData(engine)

user = Table('user', metadata,
             Column('id', Integer, primary_key=True),
             Column('name', String(20)),
             Column('fullname', String(40))
             )
address_table = Table('address', metadata,
                      Column('id', Integer, primary_key=True),
                      Column('user_id', None, ForeignKey('user.id')),
                      Column('email', String(128), nullable=False)
                      )

metadata.create_all()

 

相關文章