標籤:python
工具介紹:SQLAlchemy是Python程式設計語言下的一款ORM架構,該架構建立在資料庫API之上,使用關聯性物件映射進行資料庫操作,簡言之便是:將對象轉換成SQL,然後使用資料API執行SQL並擷取執行結果。
工作方式:通過定義類的方式來操作資料庫,一個類對應資料庫中的一個表,一個類對象對應表中的一行資料,通過執行個體化類的方式來向資料庫表中插入資料,通過對象.欄位名來擷取表中相應欄位的值。
以一個具體的例子來說明:
#!/usr/bin/env python# -*- coding:utf-8 -*-from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, String, DATETIMEfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engine# 以字典的形式配置好Mysql資料庫的串連資訊mysql_dic = { ‘mysql_user‘:‘test‘, ‘mysql_pass‘:‘1234‘, ‘mysql_ip‘:‘192.168.192.168‘, ‘mysql_port‘:3306, ‘mysql_db‘:‘test‘,}class Connect(object): # 建立一個專門串連資料庫的類 Base = declarative_base() # 建立對象的基類 def __init__(self): mysql_str = "mysql+mysqldb://{mysql_user}:{mysql_pass}@{mysql_ip}:{mysql_port}/{mysql_db}" # 串連資料庫的命令列 mysql_con = mysql_str.format(**mysql_dic) # 格式化命令 self.engine = create_engine(mysql_con, max_overflow=5) # 初始化資料庫連接 Session = sessionmaker(bind=self.engine) # 建立一個會話來操作資料庫 self.session = Session() def create_table(self): ‘‘‘尋找Base的所有子類,按照子類的結構在資料庫中產生對應的資料表資訊‘‘‘ Connect.Base.metadata.create_all(self.engine)class Server(Connect.Base): # 定義一個類(其實就是一張資料庫表)繼承Base基類 __tablename__ = ‘server‘ # 表名,以下均為表欄位 id = Column(Integer,autoincrement=1,primary_key=True) date = Column(DATETIME) user = Column(String(20)) ip = Column(String(50)) group = Column(String(50))if __name__ == ‘__main__‘: c = Connect() # 串連資料庫並建立程式與資料庫之間的會話 c.create_table() # 建立定義的server表 # 增加資料 s = Server(user=‘test‘,ip=‘192.168.100.1‘,group=‘monitor‘) # 執行個體化一個類對象 c.session.add(s) # 通過session會話向表中添加一行資料(一個類對象) # c.session.add_all([ # Server(user=‘test‘,ip=‘192.168.100.2‘,group=‘monitor‘), # Server(user=‘test‘,ip=‘192.168.100.3‘,group=‘monitor‘), # ]) # 一次添加多條資料 c.session.commit() # 提交 # 刪除資料(刪除server表中id大於2的資料) c.session.query(Server).filter(Server.id > 2).delete() c.session.commit() # 修改資料(修改server表中id大於2的資料的group欄位值為JAVA) c.session.query(Server).filter(Server.id > 2).update({‘group‘ : ‘JAVA‘}) c.session.commit() # 查詢資料(查詢server表中所有user欄位值為test的資料) ret = c.session.query(Server).filter_by(user=‘test‘).all() for i in ret: print i.ip # 擷取滿足條件的資料中ip欄位的值 c.session.close() # 關閉會話
部落格的部分內容和思路整理自武沛齊的部落格。
本文出自 “一行菜鳥上青天” 部落格,請務必保留此出處http://rmeos.blog.51cto.com/761575/1737775
Python工具之SQLAlchemy