Python的SQLalchemy模組串連與操作MySQL的基礎樣本,pythonsqlalchemy
一、SQLalchemy簡介
SQLAlchemy是一個開源的SQL工具包,基本Python程式設計語言的MIT許可證而發布的對象關係映射器。SQLAlchemy提供了“一個熟知的企業級全套持久性模式,使用ORM等獨立SQLAlchemy的一個優勢在於其允許開發人員首先考慮資料模型,並能決定稍後可視化資料的方式。
二、SQLAlchempy的安裝
首先需安裝mysql,這裡就不再多說了.....
然後,下載SQLAlchemy(http://www.sqlalchemy.org/download.html),這裡我們以Windows系統為例,然後開啟cmd,在安裝包檔案目錄下,運行
python setup.py install
,通過python下輸入
import sqlalchemy
,執行未報錯則表示安裝成功
三、SQLAlchemy的使用執行個體
1、完成簡單資料表資訊查詢
# 1. 匯入模組from sqlalchemy import *from sqlclchemy.orm import *# 2. 建立資料庫引擎mysql_engine = create_engine("$address", echo, module) #address 資料庫://使用者名稱:密碼(沒有密碼則為空白)@主機名稱:連接埠/資料庫名 #echo標識用於設定通過python標準日誌模組完成的SQLAlchemy日誌系統,當開啟日誌功能,我們將能看到所有的SQL產生代碼# 3. 建立串連connection = mysql_engine.connect()# 4. 查詢表資訊result = connection.execute("select name from t_name)for row in result: print "name: ", row['name']# 5. 關閉串連connection.close()
2、插入新的資料表
# 1. 匯入模組from sqlalchemy import *from sqlclchemy.orm import *# 2. 建立資料庫引擎mysql_engine = create_engine("$address", echo, module) #address 資料庫://使用者名稱:密碼(沒有密碼則為空白)@主機名稱:連接埠/資料庫名 #echo標識用於設定通過python標準日誌模組完成的SQLAlchemy日誌系統,當開啟日誌功能,我們將能看到所有的SQL產生代碼# 3. 設定metadata並將其綁定到資料庫引擎metadata = Metadata(mysql_engine)# 4. 定義需建立的表users = Table('users', metadata,Column('user_id', Integer, primary_key=True), Column('name', String(40)), Column('age', Integer), Column('password', String),) #Table實現方式與SQL語言中的CRETE TABLE類似# 5. 在資料庫中建立表metadata.create_all(mysql_engine) #向資料庫發出CREATE TABLE命令,由此資料庫建立名為users的表 #調用時會檢查已經存在的表結構,因此可重複調用# 6. 建立一個與資料庫中的users表匹配的python類class user(): def __int__(self, name, fullname, password): self.name = name self.fullname = fullname self.passwd = passwd #python類的屬性需與users表的列名一致# 7. 設定映射from sqlalchemy.orm import mappermapper(user, users) # mapper()建立一個新的Mapper對象,與定義的類相關聯#需要注意的是,通過mapper建立映射的資料表必須帶有主鍵,如果沒有主鍵就無法定位某個table的某行row, #如果無法定位某行row, 就無法做Object-relational mapping這樣的映射# 8. 建立sessionSession = sessionmaker(bind=mysql_egnine)session = Session() #由此我們只需對python的user類的操作,後台資料庫的具體實現交由session完成# 9. 執行session.commit() #實現與資料庫的互動# 10. 查詢usr_info = session.query(user).filter_by(age=12).first() #返回資料庫中年紀12歲的第一條資料
上面結合SQLAlchemy中ORM部分實現一個Mapper對象,將類的執行個體對應表中的記錄,執行個體的屬性對應欄位。實現一個Data Mapping需要三個元素:Tabella Metadata, user-defined class, mapper對象,這三個是實現對象對錶映射的基本元素,在此基礎上,可實現一對多的映射,實作類別似多表查詢的問題
首先建立兩個相關聯的表Student, Score,表Score中以主表的id欄位為外鍵
Student = Table('student', engine, column(‘id', Interger, primary_key = True), column('name', String, nullable=False), column('age', Interger) ) Score = Table('score', engine, column('id', Integer, primary_key=True), column('student_id', Integer, ForeignKey(student.id)) column('category', String, nullable=False), column('score', Integer) )
兩表中,Score表以Student表中id項為外鍵,一般稱Student表為主表,Score表為從表
表建立好後,那同樣,在python中需定義兩個與表相對應的類
class student_type(object): def __init__(self): self.name = None class score_type(object): def __init__(self): self.category = None
在建立mapping時,我們只需要體現兩個表間又相互關聯關係,
並不關心表中具體的主鍵與外鍵等關係(由SQLAlchemy處理),
當需要體現表student與表score間的關聯關係,mapper具體的定義方法如:
mapper(student_type, student, properties={'_scores': relation(score_type, Score)})
通過properties中參數,實現score_type 與Score的映射,
由此可以通過訪問student中的'_scores'屬性來查詢Score表中的值
另外,properties是一個字典,可以添加多個屬性,SQLAlchemy中有些模組如backref, 也可匯入
綜上,使用關係映射可以方便地從一個對象直接找到相對應的其他的對象