国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python的SQLalchemy模塊連接與操作MySQL的基礎(chǔ)示例

2019-11-25 16:39:04
字體:
供稿:網(wǎng)友

一、SQLalchemy簡介
SQLAlchemy是一個(gè)開源的SQL工具包,基本Python編程語言的MIT許可證而發(fā)布的對象關(guān)系映射器。SQLAlchemy提供了“一個(gè)熟知的企業(yè)級全套持久性模式,使用ORM等獨(dú)立SQLAlchemy的一個(gè)優(yōu)勢在于其允許開發(fā)人員首先考慮數(shù)據(jù)模型,并能決定稍后可視化數(shù)據(jù)的方式。
二、SQLAlchempy的安裝
首先需安裝mysql,這里就不再多說了.....
然后,下載SQLAlchemy(http://www.sqlalchemy.org/download.html),這里我們以Windows系統(tǒng)為例,然后打開cmd,在安裝包文件目錄下,運(yùn)行

python setup.py install

,通過python下輸入

import sqlalchemy

,執(zhí)行未報(bào)錯(cuò)則表示安裝成功
 
三、SQLAlchemy的使用實(shí)例

1、完成簡單數(shù)據(jù)表信息查詢

# 1. 導(dǎo)入模塊from sqlalchemy import *from sqlclchemy.orm import *# 2. 建立數(shù)據(jù)庫引擎mysql_engine = create_engine("$address", echo, module) #address 數(shù)據(jù)庫://用戶名:密碼(沒有密碼則為空)@主機(jī)名:端口/數(shù)據(jù)庫名 #echo標(biāo)識(shí)用于設(shè)置通過python標(biāo)準(zhǔn)日志模塊完成的SQLAlchemy日志系統(tǒng),當(dāng)開啟日志功能,我們將能看到所有的SQL生成代碼# 3. 建立連接connection = mysql_engine.connect()# 4. 查詢表信息result = connection.execute("select name from t_name)for row in result: print "name: ", row['name']# 5. 關(guān)閉連接connection.close()

 
2、插入新的數(shù)據(jù)表

# 1. 導(dǎo)入模塊from sqlalchemy import *from sqlclchemy.orm import *# 2. 建立數(shù)據(jù)庫引擎mysql_engine = create_engine("$address", echo, module) #address 數(shù)據(jù)庫://用戶名:密碼(沒有密碼則為空)@主機(jī)名:端口/數(shù)據(jù)庫名 #echo標(biāo)識(shí)用于設(shè)置通過python標(biāo)準(zhǔn)日志模塊完成的SQLAlchemy日志系統(tǒng),當(dāng)開啟日志功能,我們將能看到所有的SQL生成代碼# 3. 設(shè)置metadata并將其綁定到數(shù)據(jù)庫引擎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實(shí)現(xiàn)方式與SQL語言中的CRETE TABLE類似# 5. 在數(shù)據(jù)庫中創(chuàng)建表metadata.create_all(mysql_engine) #向數(shù)據(jù)庫發(fā)出CREATE TABLE命令,由此數(shù)據(jù)庫新建名為users的表 #調(diào)用時(shí)會(huì)檢查已經(jīng)存在的表結(jié)構(gòu),因此可重復(fù)調(diào)用# 6. 創(chuàng)建一個(gè)與數(shù)據(jù)庫中的users表匹配的python類class user(): def __int__(self, name, fullname, password): self.name = name self.fullname = fullname self.passwd = passwd #python類的屬性需與users表的列名一致# 7. 設(shè)置映射from sqlalchemy.orm import mappermapper(user, users) # mapper()創(chuàng)建一個(gè)新的Mapper對象,與定義的類相關(guān)聯(lián)#需要注意的是,通過mapper建立映射的數(shù)據(jù)表必須帶有主鍵,如果沒有主鍵就無法定位某個(gè)table的某行row, #如果無法定位某行row, 就無法做Object-relational mapping這樣的映射# 8. 創(chuàng)建sessionSession = sessionmaker(bind=mysql_egnine)session = Session() #由此我們只需對python的user類的操作,后臺(tái)數(shù)據(jù)庫的具體實(shí)現(xiàn)交由session完成# 9. 執(zhí)行session.commit() #實(shí)現(xiàn)與數(shù)據(jù)庫的交互# 10. 查詢usr_info = session.query(user).filter_by(age=12).first() #返回?cái)?shù)據(jù)庫中年紀(jì)12歲的第一條數(shù)據(jù)

上面結(jié)合SQLAlchemy中ORM部分實(shí)現(xiàn)一個(gè)Mapper對象,將類的實(shí)例對應(yīng)表中的記錄,實(shí)例的屬性對應(yīng)字段。實(shí)現(xiàn)一個(gè)Data Mapping需要三個(gè)元素:Tabella Metadata, user-defined class, mapper對象,這三個(gè)是實(shí)現(xiàn)對象對表映射的基本元素,在此基礎(chǔ)上,可實(shí)現(xiàn)一對多的映射,實(shí)現(xiàn)類似多表查詢的問題
首先創(chuàng)建兩個(gè)相關(guān)聯(lián)的表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項(xiàng)為外鍵,一般稱Student表為主表,Score表為從表
表創(chuàng)建好后,那同樣,在python中需定義兩個(gè)與表相對應(yīng)的類

class student_type(object):      def __init__(self):         self.name = None class score_type(object):      def __init__(self):         self.category = None 

在建立mapping時(shí),我們只需要體現(xiàn)兩個(gè)表間又相互關(guān)聯(lián)關(guān)系,
并不關(guān)心表中具體的主鍵與外鍵等關(guān)系(由SQLAlchemy處理),
當(dāng)需要體現(xiàn)表student與表score間的關(guān)聯(lián)關(guān)系,mapper具體的定義方法如:
mapper(student_type, student, properties={'_scores': relation(score_type, Score)})
通過properties中參數(shù),實(shí)現(xiàn)score_type 與Score的映射,
由此可以通過訪問student中的'_scores'屬性來查詢Score表中的值
另外,properties是一個(gè)字典,可以添加多個(gè)屬性,SQLAlchemy中有些模塊如backref, 也可導(dǎo)入

綜上,使用關(guān)系映射可以方便地從一個(gè)對象直接找到相對應(yīng)的其他的對象

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 工布江达县| 上杭县| 留坝县| 乌审旗| 临汾市| 汤原县| 崇仁县| 丁青县| 讷河市| 蒲城县| 麦盖提县| 汝州市| 武鸣县| 特克斯县| 万荣县| 桃园县| 武汉市| 吴江市| 陆良县| 平乡县| 福清市| 揭阳市| 嘉义市| 达日县| 满洲里市| 乌什县| 沈阳市| 阜新市| 西丰县| 华亭县| 凉城县| 聂拉木县| 潮安县| 忻州市| 申扎县| 平和县| 辉南县| 深泽县| 新河县| 昌平区| 太保市|