欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年07月11日 15:30:34   作者:linda1000  
SQLalchemy是Python世界中驅(qū)動(dòng)MySQL的一款高人氣模塊,這里我們從入門(mén)開(kāi)始來(lái)看一下Python的SQLalchemy模塊連接與操作MySQL的基礎(chǔ)示例:

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

python setup.py install

,通過(guò)python下輸入

import sqlalchemy

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

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

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

上面結(jié)合SQLAlchemy中ORM部分實(shí)現(xiàn)一個(gè)Mapper對(duì)象,將類的實(shí)例對(duì)應(yīng)表中的記錄,實(shí)例的屬性對(duì)應(yīng)字段。實(shí)現(xiàn)一個(gè)Data Mapping需要三個(gè)元素:Tabella Metadata, user-defined class, mapper對(duì)象,這三個(gè)是實(shí)現(xiàn)對(duì)象對(duì)表映射的基本元素,在此基礎(chǔ)上,可實(shí)現(xiàn)一對(duì)多的映射,實(shí)現(xiàn)類似多表查詢的問(wè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è)與表相對(duì)應(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)})
通過(guò)properties中參數(shù),實(shí)現(xiàn)score_type 與Score的映射,
由此可以通過(guò)訪問(wèn)student中的'_scores'屬性來(lái)查詢Score表中的值
另外,properties是一個(gè)字典,可以添加多個(gè)屬性,SQLAlchemy中有些模塊如backref, 也可導(dǎo)入

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

相關(guān)文章

  • Python中zfill()方法的使用教程

    Python中zfill()方法的使用教程

    這篇文章主要介紹了Python中zfill()方法的使用教程,是Python入門(mén)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • python 提取文件指定列的方法示例

    python 提取文件指定列的方法示例

    這篇文章主要介紹了python 提取文件指定列的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • OpenCV特征提取與檢測(cè)之Shi-Tomasi角點(diǎn)檢測(cè)器

    OpenCV特征提取與檢測(cè)之Shi-Tomasi角點(diǎn)檢測(cè)器

    在角點(diǎn)檢測(cè)的世界里哈瑞斯無(wú)疑是最重要的方法之一,但Shi-Tomasi作為改進(jìn)的算法也有很大應(yīng)用場(chǎng)景,尤其是動(dòng)態(tài)跟蹤用的還比較多,這篇文章主要給大家介紹了關(guān)于OpenCV特征提取與檢測(cè)之Shi-Tomasi角點(diǎn)檢測(cè)器的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 使用Python實(shí)現(xiàn)視頻封面批量下載器

    使用Python實(shí)現(xiàn)視頻封面批量下載器

    在視頻網(wǎng)站上,每個(gè)視頻都有一個(gè)獨(dú)特的封面圖像,本文主要為大家詳細(xì)如何使用Python編寫(xiě)一個(gè)視頻封面批量下載器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • python多線程共享變量的使用和效率方法

    python多線程共享變量的使用和效率方法

    今天小編就為大家分享一篇python多線程共享變量的使用和效率方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • python爬蟲(chóng)MeterSphere平臺(tái)執(zhí)行報(bào)告使用實(shí)戰(zhàn)

    python爬蟲(chóng)MeterSphere平臺(tái)執(zhí)行報(bào)告使用實(shí)戰(zhàn)

    這篇文章主要為大家介紹了python爬蟲(chóng)MeterSphere平臺(tái)執(zhí)行報(bào)告使用實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 關(guān)于Python連接Cassandra容器進(jìn)行查詢的問(wèn)題

    關(guān)于Python連接Cassandra容器進(jìn)行查詢的問(wèn)題

    這篇文章主要介紹了Python連接Cassandra容器進(jìn)行查詢的問(wèn)題,問(wèn)題的關(guān)鍵在于尋找到Cassandra的9042端口,從而獲取數(shù)據(jù),具有內(nèi)容詳情跟隨小編一起看看吧
    2021-11-11
  • 10行Python代碼實(shí)現(xiàn)Web自動(dòng)化管控的示例代碼

    10行Python代碼實(shí)現(xiàn)Web自動(dòng)化管控的示例代碼

    這篇文章主要介紹了10行Python代碼實(shí)現(xiàn)Web自動(dòng)化管控的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • django 模型中的計(jì)算字段實(shí)例

    django 模型中的計(jì)算字段實(shí)例

    這篇文章主要介紹了django 模型中的計(jì)算字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Python實(shí)現(xiàn)滑動(dòng)平均(Moving Average)的例子

    Python實(shí)現(xiàn)滑動(dòng)平均(Moving Average)的例子

    今天小編就為大家分享一篇Python實(shí)現(xiàn)滑動(dòng)平均(Moving Average)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08

最新評(píng)論