sqlalchemy是python當中比較出名的orm程序。php
orm英文全稱object relational mapping,就是對象映射關係程序,簡單來講咱們相似python這種面向對象的程序來講一切皆對象,可是咱們使用的數據庫卻都是關係型的,爲了保證一致的使用習慣,經過orm將編程語言的對象模型和數據庫的關係模型創建映射關係,這樣咱們在使用編程語言對數據庫進行操做的時候能夠直接使用編程語言的對象模型進行操做就能夠了,而不用直接使用sql語言。css
sqlalchemy是python的orm程序,在整個python界當中至關出名。python
在使用sqlalchemy以前要先給python安裝mysql驅動,因爲我使用的是python3原來的mysqldb不可用,因此這裏推薦使用pymysql。
咱們經過pip進行安裝,在windows下使用pip安裝包的時候要記得使用管理員身份運行cmd否則有些操做是沒法進行的。mysql
pip install pymysql
安裝完之後安裝再安裝sqlalchemysql
pip install sqlalchemy
經過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,性別男。其中身高,體重,性別就是元數據。當咱們建立好鏈接引擎之後能夠經過這個引擎抓取元數據。windows
metadata=MetaData(engine)
經過MetaData()方法建立了metadata實例,在這個方法裏面帶上engine的目的是綁定要鏈接引擎,當咱們對這個metadata實例進行操做的時候就會直接鏈接到數據庫。app
設定好鏈接引擎和元數據,讓咱們向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()