1. 程式人生 > >ORM框架/SQLAchemy

ORM框架/SQLAchemy

.sql outer con lac 數據庫操作 username users soft class

SQLAchemy是Python編程語言下的一款ORM框架,該框架建立在數據庫API之上,使用關系對象映射進行數據庫操作,即:將對象轉換成SQL,然後使用數據API執行SQL並獲取執行結果。

1.安裝

pip3 install SQLAlchemy

SQLAchemy本身無法操作數據庫,必須依賴pymysql等第三方插件,Dialect用於和數據API進行交流,根據配置文件的不同調用不同的數據庫API,從而實現對數據庫的操作:

MySQL-Python
     mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

例如:
mysql+pymysql://root:[email protected]
/* */:3306/db1?charset=utf8 pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle oracle+cx_oracle://user:[email protected]
/* */:port/dbname[?key=value&key=value...]

2.ORM功能使用

2.1創建表

#導入模塊
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey,UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker,relationship
from sqlalchemy import create_engine

Base=declarative_base()#繼承Base類
#創建表單
class UserType(Base):
        __tablename__=‘usertype‘##新建表名稱
        id=Column(Integer,primary_key=True,autoincrement=True)##設置表列名,類型,主鍵,自增
        title=Column(String(32),nullable=True,index=True)##設置表列名,類型,是否可以為空,索引

class User(Base):
        __tablename__=‘users‘##新建表名稱
        id = Column(Integer, primary_key=True, autoincrement=True)
        name = Column(String(32), nullable=True, index=True)
        email = Column(String(16), unique=True)##設置表列名,類型,唯一索引
        user_type_id = Column(Integer, ForeignKey(‘usertype.id‘))#設置表列名,類型,外鍵
          # __table_args__ = (
          # UniqueConstraint(‘id‘, ‘name‘, name=‘uix_id_name‘),
          # Index(‘ix_n_ex‘,‘name‘, ‘email‘,),
          # )
  

       user_type=relationship(‘UserType‘,backref=‘xxoo‘)##設置relationship,將兩個類關聯,在查詢User表格時,也會查詢到
    # UserType表格,觸發查詢UserType表格是在循環遍歷結果時調用UserType表格的屬性
    #  設置backref為反向查詢
def create_db():
    Base.metadata.create_all(engine)
def drop_db():
    Base.metadata.create_all(engine)

engine=create_engine(‘mysql+pymysql://root:[email protected]
/* */:3306/db1?charset=utf8‘,max_overflow=5)#使用第三方模塊連接數據庫, #設置最大連接數 Session=sessionmaker(bind=engine)#生成一個會話 session=Session() create_db()#創建表格

2.2操作表

##創建一個
obj1=UserType(title=‘‘)#實例化對象
session.add(obj1)

##創建多個
objs=[
 UserType(title=‘egon‘),
 UserType(title=‘eric‘),
 UserType(title=‘aldx‘)]
 session.add_all(objs) 

session.query(UserType.id,UserType.title).filter(UserType.id>2).delete() 

# 以下兩種方法都是在原來基礎上操作值
session.query(UserType.id,UserType.title).filter(UserType.id>0).update({UserType.title:UserType.title+‘x‘},synchronize_session=‘False‘)
##字符串操作
session.query(Users).filter(Users.id > 2).update({"num": Users.num + 1}, synchronize_session="evaluate")
##數字類型操作

print(session.query(UserType))
user_type_list=session.query(UserType).all()##user_type_list是一個列表

user_type_list=session.query(UserType).filter(UserType.id>2)##filter是過濾
#該語句相當於where條件語句

for row in user_type_list:
     print(row.id)

其他

# 條件
ret = session.query(Users).filter_by(name=‘alex‘).all()
ret = session.query(Users).filter(Users.id > 1, Users.name == ‘eric‘).all()
ret = session.query(Users).filter(Users.id.between(1, 3), Users.name == ‘eric‘).all()
ret = session.query(Users).filter(Users.id.in_([1,3,4])).all()
ret = session.query(Users).filter(~Users.id.in_([1,3,4])).all()
ret = session.query(Users).filter(Users.id.in_(session.query(Users.id).filter_by(name=‘eric‘))).all()
from sqlalchemy import and_, or_
ret = session.query(Users).filter(and_(Users.id > 3, Users.name == ‘eric‘)).all()
ret = session.query(Users).filter(or_(Users.id < 2, Users.name == ‘eric‘)).all()
ret = session.query(Users).filter(
    or_(
        Users.id < 2,
        and_(Users.name == ‘eric‘, Users.id > 3),
        Users.extra != ""
    )).all()


# 通配符
ret = session.query(Users).filter(Users.name.like(‘e%‘)).all()
ret = session.query(Users).filter(~Users.name.like(‘e%‘)).all()

# 限制
ret = session.query(Users)[1:2]

# 排序
ret = session.query(Users).order_by(Users.name.desc()).all()
ret = session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()

# 分組
from sqlalchemy.sql import func

ret = session.query(Users).group_by(Users.extra).all()
ret = session.query(
    func.max(Users.id),
    func.sum(Users.id),
    func.min(Users.id)).group_by(Users.name).all()

ret = session.query(
    func.max(Users.id),
    func.sum(Users.id),
    func.min(Users.id)).group_by(Users.name).having(func.min(Users.id) >2).all()

# 連表

ret = session.query(Users, Favor).filter(Users.id == Favor.nid).all()

ret = session.query(Person).join(Favor).all()

ret = session.query(Person).join(Favor, isouter=True).all()


# 組合
q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret = q1.union(q2).all()

q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret = q1.union_all(q2).all()

  

ORM框架/SQLAchemy

相關推薦

ORM框架/SQLAchemy

.sql outer con lac 數據庫操作 username users soft class SQLAchemy是Python編程語言下的一款ORM框架,該框架建立在數據庫API之上,使用關系對象映射進行數據庫操作,即:將對象轉換成SQL,然後使用數據API執行SQ

Morphia - mongodb之ORM框架

embedded art tails transient sdn tar detail nbsp hit 一、簡介 二、註解 [email protected]/* */ [email protected]/* */[email prote

Python ORM框架之 Peewee入門

lob shortcuts pymysql 主鍵 也會 roo username fault 有意思   之前在學Django時,發現它的模型層非常好用,把對數據庫的操作映射成對類、對象的操作,避免了我們直接寫在Web項目中SQL語句,當時想,如果這個模型層可以獨立出來使用

mysql篇---ORM框架

關系 log org 轉換成 als 交流 bsp alt 映射 一.面向對象回顧 二.ORM框架 SQLAlchemy是Python編程語言下的一款ORM框架,該框架建立在數據庫API之上,使用關系對象映射進行數據庫操作,簡言之便是:將對象轉換成SQL,然後使

自己寫ORM框架 DBUtils

技術 外部 acl reat 開源 htm pac top enter ORM框架想必大家都比較熟知了,即對象關系映射(英語:Object Relation Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序技術,用於實現面向對象編程語言裏不同類

Django之自帶ORM框架

數據 增加 tle 執行 max 模板 logs big backend 前言 Django的工作流程 1、客戶端發送請求到達 URL2、URL把客戶端請求轉發給請求函數3、視圖函數 使用原生SQL或者ORM去數據庫拿到數據進行渲染(模板+數據渲染)4、return 返回給

ORM框架簡介

易懂 保存 應用 數據訪問層 移植 語句 tle 面向 程序 1. 什麽是ORM? 對象-關系映射(Object-Relational Mapping,簡稱ORM),面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關系數據庫是企業級應用環境中永久存放數據的主

Node.js ORM框架Sequelize(一)搭建服務

服務 l數據庫 數據 需要 log alt mysq 執行 準備 需要準備的環境:node.js mysql 1、在本地創建一個文件夾 2、執行npm init 創建成一個Node包,執行成功後文件夾裏會有一個json文件 3、安裝Sequelize 4、在

ORM框架疏理——廖雪峰實戰系列(一)

命令 delete ica 隱式 orm mod prim 數據結構 lam ORM(Object Relational Mapping,對象關系映射),是一種程序設計技術,用於實現面向對象編程語言裏不同類型系統的數據之間的轉換。從效果上來說,它其實創建了一個可在編程語言裏

Hibernate ORM框架——第一章:Hibernate簡介與操作基礎

n) next() 使用 ber std 10g ice 一個 png 一、相關使用工具的下載與導入(環境配置) hibernate-release-4.2.21.Final-->舊版本hibernate-release-5.2.10.Final-->新版本 首

Hibernate ORM框架——綜合

連接數 org 延遲 導入 配置 enc 兩張 應用程序 鍵值 換一個連接數據mySql數據庫的項目:HibernateStudy_cascade_inverse_query **********1.支持sql server需要的設置*******************

ORM框架知識點

pin 特征 模型 實體類 能夠 和數 字段 就會 edm 最近在網上學習,覺得很實用,記了一下筆記 一、基本概念 ORM:對象關系映射(Object-Relation-Mapping)主要實現基於面向對象方式操作數據庫的各種方法,是一種框架技術。長期以來,C#面向對象編程

基於輕量級ORM框架Dapper的擴展說明

sca mapper server proxy mage alt .exe () 數據庫 這裏簡單的介紹一下本人基於Dapper作的一些簡單的擴展,供大家參考。 為何要使用這款框架,相信大家看到下面排名就清楚了 其實在各大網站上,我們大概都會看到這樣的一個對比效果圖

.net ORM框架(Dapper簡單應用)

tostring 書籍 config tlist get string event tegra connect 1.引入 Dapper.dll類庫 2.創建書籍模型book using System; using System.Collections.Generic; u

ORM框架SQLAlchemy與權限管理系統的數據庫設計

make nec elif target ora 第三方 增刪改 ont 好的 SQLAlchemy是Python編程語言下的一款ORM框架,該框架建立在數據庫API之上,使用對象關系映射進行數據庫操作,即:將對象轉換成SQL,然後使用數據API執行SQL並獲取執行結果。

ORM框架之------Dapper,Net下無敵的ORM

官網 結果集 vid 方便 喜歡 完全 字符 sqlite數據庫 工作 一,介紹:Dapper是一款輕量級ORM工具。如果你在小的項目中,使用Entity Framework、NHibernate 來處理大數據訪問及關系映射,未免有點殺雞用牛刀。你又覺得ORM省時省力,

mysql數據庫(day6)索引,ORM框架

mys 返回值 group by comm 臨時 etc 參考 nio 數據 參考博客: http://www.cnblogs.com/wupeiqi/articles/5713323.html http://www.cnblogs.com/wupeiqi/articles

ORM框架-MyBatis使用經驗總結

sso 經驗 美的 靈活 ring 之間 結果 工具 面向 使用Spring-Mybatis工具包,使用基於接口的映射器; 復雜的數據結構使用XML配置映射語句;簡單的SQL語句建議直接使用Java註解來編寫映射語句; 使用@Param對接口參數添加註解,將面向SQL的參數

ORM框架SQLAlchemy學習(未整理完)

性能 select create external 其他 class 學習 -m -- 一、基本介紹   以下介紹來自維基百科,自由的百科全書。   SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對象關系映射(ORM)工具,使用MIT許

Mego(1) - NET中主流ORM框架性能對比

lan oid 評論 rman date ini ted eat init 從剛剛開始接觸ORM到現在已有超過八年時間,用過了不少ORM框架也了解了不少ORM框架,看過N種關於ORM框架的相關資料與評論,各種言論讓人很難選擇。在ORM的眾多問題中最突出的問題是關於性能方面的