sqlalchemy是python當(dāng)中比較出名的orm程序。
什么是orm臭埋?
orm英文全稱object relational mapping,就是對(duì)象映射關(guān)系程序,簡(jiǎn)單來(lái)說(shuō)我們類似python這種面向?qū)ο蟮某绦騺?lái)說(shuō)一切皆對(duì)象,但是我們使用的數(shù)據(jù)庫(kù)卻都是關(guān)系型的务漩,為了保證一致的使用習(xí)慣,通過(guò)orm將編程語(yǔ)言的對(duì)象模型和數(shù)據(jù)庫(kù)的關(guān)系模型建立映射關(guān)系它褪,這樣我們?cè)谑褂镁幊陶Z(yǔ)言對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的時(shí)候可以直接使用編程語(yǔ)言的對(duì)象模型進(jìn)行操作就可以了饵骨,而不用直接使用sql語(yǔ)言。
什么是sqlalchemy?
sqlalchemy是python的orm程序茫打,在整個(gè)python界當(dāng)中相當(dāng)出名居触。
安裝sqlalchemy
在使用sqlalchemy之前要先給python安裝mysql驅(qū)動(dòng)妖混,由于我使用的是python3原來(lái)的mysqldb不可用,所以這里推薦使用pymysql轮洋。
我們通過(guò)pip進(jìn)行安裝,在windows下使用pip安裝包的時(shí)候要記得使用管理員身份運(yùn)行cmd不然有些操作是無(wú)法進(jìn)行的制市。
pip install pymysql
安裝完以后安裝再安裝sqlalchemy
pip install sqlalchemy
如何使用sqlalchemy連接mysql?
通過(guò)import導(dǎo)入必要的包
from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey
創(chuàng)建一個(gè)連接引擎
engine=create_engine("mysql+pymysql://root:a5230411@localhost:3306/test",echo=True)
我們將連接引擎放到engine里面方便后面使用。
create_engine("數(shù)據(jù)庫(kù)類型+數(shù)據(jù)庫(kù)驅(qū)動(dòng)://數(shù)據(jù)庫(kù)用戶名:數(shù)據(jù)庫(kù)密碼@IP地址:端口/數(shù)據(jù)庫(kù)"弊予,其他參數(shù))
上文當(dāng)中echo=True是開(kāi)啟調(diào)試祥楣,這樣當(dāng)我們執(zhí)行文件的時(shí)候會(huì)提示相應(yīng)的文字。
創(chuàng)建元數(shù)據(jù)
什么是元數(shù)據(jù)汉柒?元數(shù)據(jù)就是描述數(shù)據(jù)的數(shù)據(jù)荣堰,舉個(gè)簡(jiǎn)單的例子,小明身高170cm竭翠,體重50kg振坚,性別男。其中身高斋扰,體重渡八,性別就是元數(shù)據(jù)。當(dāng)我們創(chuàng)建好連接引擎以后可以通過(guò)這個(gè)引擎抓取元數(shù)據(jù)传货。
metadata=MetaData(engine)
通過(guò)MetaData()方法創(chuàng)建了metadata實(shí)例屎鳍,在這個(gè)方法里面帶上engine的目的是綁定要連接引擎,當(dāng)我們對(duì)這個(gè)metadata實(shí)例進(jìn)行操作的時(shí)候就會(huì)直接連接到數(shù)據(jù)庫(kù)问裕。
添加表結(jié)構(gòu)
設(shè)定好連接引擎和元數(shù)據(jù)逮壁,讓我們向mysql里面創(chuàng)建表結(jié)構(gòu)來(lái)進(jìn)行測(cè)試。
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)
)
其中Table()方法用來(lái)創(chuàng)建表粮宛,第一個(gè)參數(shù)為表明窥淆,第二是存入元數(shù)據(jù),后面的參數(shù)使用Column()方法將數(shù)據(jù)庫(kù)當(dāng)中每一個(gè)字段的數(shù)據(jù)參數(shù)設(shè)置好巍杈。
執(zhí)行創(chuàng)建
metadata.create_all()
因?yàn)橐褜⒈斫Y(jié)構(gòu)存到了metadata里面忧饭,然后讓metadata執(zhí)行create_all()方法,這樣就向數(shù)據(jù)庫(kù)里創(chuàng)建了user和address表筷畦。
完成代碼
from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey
engine=create_engine("mysql+pymysql://root:a5230411@localhost:3306/test",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()