什么是sqlalchemyORM 全稱(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)! 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)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
這些表的類(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
增、刪、改、查 創(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)型
|
|
來(lái)自: lihuimail > 《待分類(lèi)》