一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

月薪25k的運(yùn)維大神從0基礎(chǔ)帶你完全掌握Sqlalchemy!非常實(shí)用!

 lihuimail 2017-10-07

什么是sqlalchemy

ORM 全稱(chēng) Object Relational Mapping對(duì)象關(guān)系映射。

在給大家分享之前,先介紹下 小編組織的一個(gè)學(xué)習(xí)交流企鵝群:526929231 有什么不懂的問(wèn)題,都可以在群里問(wèn),學(xué)習(xí)氣氛很好,眾多大神都很熱情。群文件里面也有各種全面的python資料,以及自動(dòng)化運(yùn)維學(xué)習(xí)資料,是一個(gè)非常適合學(xué)習(xí)的地方,小編期待大家的加入,大家一起學(xué)習(xí),共同成長(zhǎng)!

月薪25k的運(yùn)維大神從0基礎(chǔ)帶你完全掌握Sqlalchemy!非常實(shí)用!

SQLAlchemy 是一個(gè)數(shù)據(jù)庫(kù)的ORM框架,python操作數(shù)據(jù)庫(kù)的工具ORM 將數(shù)據(jù)庫(kù)中的表與面向?qū)ο笳Z(yǔ)言中的類(lèi)建立了一種對(duì)應(yīng)關(guān)系。

部署環(huán)境

第一、mysql 數(shù)據(jù)庫(kù)。

第二、pymysql 用于連接 MySQL 服務(wù)器的一個(gè)庫(kù)

通過(guò)e裝 : pip install pymysql

第三、sqlalchemy 數(shù)據(jù)庫(kù)的ORM框架

通過(guò)pip安裝 : pip install sqlalchemy

注意: pip安裝是在python的環(huán)境變量配置好的前提下打開(kāi)windows上的命令提示符進(jìn)行安裝。 安裝完成后打開(kāi)python IDLE,通過(guò)import sqlalchemy測(cè)試是否安裝成功。

使用sqlaclchemy

從sqlalchemy中導(dǎo)入create_engin,創(chuàng)建引擎建立與數(shù)據(jù)庫(kù)的連接。

from sqlalchemy import create_engine

準(zhǔn)備連接數(shù)據(jù)庫(kù)的數(shù)據(jù):

HOSTNAME = '127.0.0.1' # ip地址

PORT = '3306' # 端口號(hào)

DATABASE = 'sqlceshi' # 數(shù)據(jù)庫(kù)名

USERNAME = 'zhiliaoawen' # 用戶名

PASSWORD = 'zhiliaoawen' # 用戶登錄密碼

DB_URI的格式:

數(shù)據(jù)庫(kù)類(lèi)型 數(shù)據(jù)庫(kù)驅(qū)動(dòng)名稱(chēng)://用戶名:密碼@機(jī)器地址:端口號(hào)/數(shù)據(jù)庫(kù)名?字符編碼

DB_URI=mysql pymysql://<username>:<password>@<host>/<dbname>charset=utf8

engine = create_engine(DB_URI)

  • 聲明映射

    對(duì)象關(guān)系型映射,數(shù)據(jù)庫(kù)中的表與python中的類(lèi)相對(duì)應(yīng),創(chuàng)建的類(lèi)必須繼承自sqlalchemy中的基類(lèi)。

    使用Declarative方法定義的映射類(lèi)依據(jù)一個(gè)基類(lèi),

    這個(gè)基類(lèi)是維系類(lèi)和數(shù)據(jù)表關(guān)系的目錄

    應(yīng)用通常只需要有一個(gè)base的實(shí)例。我們通過(guò)declarative_base()功能創(chuàng)建一個(gè)基類(lèi)

from sqlalchemy.ext.declarative import declarative_base Base = declarative_base(engine)
  • 創(chuàng)建數(shù)據(jù)表對(duì)應(yīng)的類(lèi)

這些表的類(lèi)都繼承于我們的Base基類(lèi)

定義好一些屬性,與user表中的字段進(jìn)行映射并且這個(gè)屬性要屬于某個(gè)類(lèi)型

Column用來(lái)創(chuàng)建表中的字段的一個(gè)方法

sqlalchemy常用的數(shù)據(jù)類(lèi)型

Integer:整形,映射到數(shù)據(jù)庫(kù)中的int類(lèi)型。

String:字符類(lèi)型,映射到數(shù)據(jù)庫(kù)中的varchar類(lèi)型,使用時(shí),需要提供一個(gè)字符長(zhǎng)度。

from sqlalchemy import Column,Integer,String

  • 數(shù)據(jù)操作

增、刪、改、查

創(chuàng)建會(huì)話

需要定義個(gè)session會(huì)話對(duì)象

sessionmaker初始化一個(gè)類(lèi)對(duì)象

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(engine)

session = Session()

創(chuàng)建一個(gè)對(duì)象

將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中:

將創(chuàng)建的user對(duì)象添加到會(huì)話對(duì)象中

添加單個(gè)對(duì)象:

session.add(user)

添加多個(gè)對(duì)象:

session.add_all([user1,user2,....])

將會(huì)話對(duì)象進(jìn)行提交:

session.commit()

如果你不想將修改提交則使用回滾:session.rollback()

通過(guò)session的query這個(gè)對(duì)象完成的

查找User這張表中的所有數(shù)據(jù)

session.query(User).all()

查找User這張表中的第一條數(shù)據(jù)

session.query(User).first()

通過(guò)username=taka來(lái)進(jìn)行過(guò)濾查找

session.query(User).filter_by(username='taka')

通過(guò)get方法,用主鍵查找對(duì)象

session.query(User).get(primary_key)

補(bǔ)充:

filter 引用列名時(shí),使用“類(lèi)名.屬性名”的方式,比較使用兩個(gè)等號(hào)“==”

filter_by 引用列名時(shí),使用“屬性名”,比較使用一個(gè)等號(hào)“=” 賦值這種形式

先從數(shù)據(jù)庫(kù)中找到數(shù)據(jù)

修改成需要的數(shù)據(jù)

做事物的提交操作:

user = session.query(User).filter_by(id=3)[0]

user.username = 'awen'

session.commit()

先從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)

使用session.delete方法進(jìn)行刪除

做事務(wù)的提交操作:

user = session.query(User).filter_by(username='taka').first()

user.delete(user)

session.commit()

常用過(guò)濾方法

filter和filter_by的區(qū)別:

filter 引用列名時(shí),使用“類(lèi)名.屬性名”的方式,比較使用兩個(gè)等號(hào)“==”

filter_by 引用列名時(shí),使用“屬性名”,比較使用一個(gè)等號(hào)“=”

等于: session.query(User).filter(User.username == 'taka').all() 不等于: session.query(User).filter(User.username != 'taka').all() 模糊匹配like: session.query(User).filter(User.username.like('taka%')).all() 成員所屬(in_): session.query(User).filter(User.username.in_(['tk','塔卡','taka'])).all() 不屬于notin: session.query(User).filter(~User.username.in_(['tk','塔卡','taka'])).all() session.query(User).filter(User.username.notin_(['tk','塔卡','taka'])).all() 為空is null: session.query(User).filter(User.username==None).all() # 或者是 session.query(User).filter(User.username.is_(None)).all() 不為空is not null: session.query(User).filter(User.username != None).all() # 或者是 session.query(User).filter(User.username.isnot(None)).all() 多個(gè)條件and: session.query(User).filter(User.username=='taka',User.password=='123456').all() session.query(User).filter_by(username='tk',password='1234').all() 條件或or: from sqlalchemy import or_ session.query(User).filter(or_(User.username=='tk',User.password=='123456')).all()

sqlalchemy常用數(shù)據(jù)類(lèi)型

  1. Integer:整型,映射到數(shù)據(jù)庫(kù)中的int類(lèi)型。

  2. String:字符類(lèi)型,映射到數(shù)據(jù)庫(kù)中的varchar類(lèi)型,使用時(shí),需要提供一個(gè)字符長(zhǎng)度。

  3. Text:文本類(lèi)型,映射到數(shù)據(jù)庫(kù)中的text類(lèi)型。

  4. Boolean:布爾類(lèi)型,映射到數(shù)據(jù)庫(kù)中的tinyint類(lèi)型,在使用的時(shí)候,傳遞True/False進(jìn)去。

  5. Date:日期類(lèi)型,沒(méi)有時(shí)間。映射到數(shù)據(jù)庫(kù)中是date類(lèi)型,

  6. 在使用的時(shí)候,傳遞datetime.date()進(jìn)去。

  7. DateTime:日期時(shí)間類(lèi)型。映射到數(shù)據(jù)庫(kù)中的是datetime類(lèi)型,

  8. 在使用的時(shí)候,傳遞datetime.datetime()進(jìn)去。

  9. Float:浮點(diǎn)類(lèi)型。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    久久精品欧美一区二区三不卡| 天堂网中文字幕在线视频| 在线免费视频你懂的观看| 国产精品美女午夜视频| 国产一区二区不卡在线播放| 亚洲高清欧美中文字幕| 午夜激情视频一区二区| 国产精品欧美一区两区| 国产精品尹人香蕉综合网| 欧美国产日韩在线综合| 日韩一级一片内射视频4k| 五月天丁香亚洲综合网| 沐浴偷拍一区二区视频| 亚洲欧美天堂精品在线| 欧美日韩综合免费视频| 国产主播精品福利午夜二区| 日韩精品一区二区不卡| 好吊妞视频只有这里有精品| 91国内视频一区二区三区| 国产传媒中文字幕东京热| 一区二区三区18禁看| 久久99精品日韩人妻| 人体偷拍一区二区三区| 超碰在线播放国产精品| 91欧美日韩精品在线| 国产色第一区不卡高清| 久久热九九这里只有精品| 欧美国产日本高清在线| 男女激情视频在线免费观看| 国产一区二区三区免费福利| 国产精品涩涩成人一区二区三区 | 男女激情视频在线免费观看| 少妇在线一区二区三区| 少妇人妻精品一区二区三区| 丰满少妇被猛烈撞击在线视频| 色好吊视频这里只有精| 中文字幕日韩精品人一妻| 日韩欧美国产高清在线| 青青操视频在线播放免费| 国产a天堂一区二区专区| 深夜视频在线观看免费你懂|