python使用sqlalchemy連接mysql數據庫
sqlalchemy是python當中比較出名的orm程序。
什么是orm?
orm英文全稱object relational mapping,就是對象映射關系程序,簡單來說我們類似python這種面向對象的程序來說一切皆對象,但是我們使用的數據庫卻都是關系型的,為了保證一致的使用習慣,通過orm將編程語言的對象模型和數據庫的關系模型建立映射關系,這樣我們在使用編程語言對數據庫進行操作的時候可以直接使用編程語言的對象模型進行操作就可以了,而不用直接使用sql語言。
什么是sqlalchemy?
sqlalchemy是python的orm程序,在整個python界當中相當出名。
安裝sqlalchemy
在使用sqlalchemy之前要先給python安裝mysql驅動,由於我使用的是python3原來的mysqldb不可用,所以這里推薦使用pymysql。
我們通過pip進行安裝,在windows下使用pip安裝包的時候要記得使用管理員身份運行cmd不然有些操作是無法進行的。
pip install pymysql
安裝完以后安裝再安裝sqlalchemy
pip install sqlalchemy
如何使用sqlalchemy連接mysql?
通過import導入必要的包
from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey
創建一個連接引擎
engine=create_engine("mysql+pymysql://root:a5230411@localhost:3306/test",echo=True)
我們將連接引擎放到engine里面方便后面使用。
create_engine("數據庫類型+數據庫驅動://數據庫用戶名:數據庫密碼@IP地址:端口/數據庫",其他參數)
上文當中echo=True是開啟調試,這樣當我們執行文件的時候會提示相應的文字。
創建元數據
什么是元數據?元數據就是描述數據的數據,舉個簡單的例子,小明身高170cm,體重50kg,性別男。其中身高,體重,性別就是元數據。當我們創建好連接引擎以后可以通過這個引擎抓取元數據。
metadata=MetaData(engine)
通過MetaData()方法創建了metadata實例,在這個方法里面帶上engine的目的是綁定要連接引擎,當我們對這個metadata實例進行操作的時候就會直接連接到數據庫。
添加表結構
設定好連接引擎和元數據,讓我們向mysql里面創建表結構來進行測試。
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()方法用來創建表,第一個參數為表明,第二是存入元數據,后面的參數使用Column()方法將數據庫當中每一個字段的數據參數設置好。
執行創建
metadata.create_all()
因為已將將表結構存到了metadata里面,然后讓metadata執行create_all()方法,這樣就向數據庫里創建了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()
