Python之路51-sqlalchemy

來源:互聯網
上載者:User

標籤:python

ORM介紹

orm英文全稱object relational mapping,就是對象映射關係程式,簡單來說我們類似python這種物件導向的程式來說一切皆對象,但是我們使用的資料庫卻都是關係型的,為了保證一致的使用習慣,通過orm將程式設計語言的物件模型和資料庫的關聯式模式建立映射關係,這樣我們在使用程式設計語言對資料庫進行操作的時候可以直接使用程式設計語言的物件模型進行操作就可以了,而不用直接使用sql語言。


orm的優點:

隱藏了資料訪問細節,“封閉”的通用資料庫互動,ORM的核心。他使得我們的通用資料庫互動變得簡單易行,並且完全不用考慮該死的SQL語句。快速開發,由此而來。

ORM使我們構造固化資料結構變得簡單易行。

缺點:

無可避免的,自動化意味著映射和關聯管理,代價是犧牲效能(早期,這是所有不喜歡ORM人的共同點)。現在的各種ORM架構都在嘗試使用各種方法來減輕這塊(LazyLoad,Cache),效果還是很顯著的。


sqlalchemy安裝

pip install SQLAlchemy

pip install pymysql


sqlalchemy基本使用

先建立一個表

CREATE TABLE user (    id INTEGER NOT NULL AUTO_INCREMENT,    name VARCHAR(32),    password VARCHAR(64),    PRIMARY KEY (id))


使用sqlalchemy實現同樣的功能

建立user表

import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringengine = create_engine("mysql+pymysql://root:@127.0.0.1/learn_python",                       encoding="utf-8",                       echo=True)Base = declarative_base()   # 產生orm基類class User(Base):    __tablename__ = "user"  # 表明    id = Column(Integer, primary_key=True)    name = Column(String(32))    password = Column(String(64))Base.metadata.create_all(engine)    # 建立表結構


user表已經建立好了,那我們開始用orm建立一條資料試試

import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmaker# 建立user表engine = create_engine("mysql+pymysql://root:@127.0.0.1/learn_python",                       encoding="utf-8")Base = declarative_base()   # 產生orm基類class User(Base):    __tablename__ = "user"  # 表名    id = Column(Integer, primary_key=True)    name = Column(String(32))    password = Column(String(64))Base.metadata.create_all(engine)    # 建立表結構Session_class = sessionmaker(bind=engine)   # 建立與資料庫的會話session class,注意,這裡返回給session的是個class,不是執行個體Session = Session_class()                   # 產生session執行個體user_obj = User(name="Rain", password="1111111")     # 產生你要建立的資料對象# print(user_obj.name, user_obj.password)             # 此時還沒建立對象呢,不信你列印一下id發現還是NoneSession.add(user_obj)                               # 把要建立的資料對象添加到這個session裡,一會統一建立# print(user_obj.name, user_obj.id)                   # 此時也依然還沒建立Session.commit()                                    # 現在才統一提交,建立資料


查詢

import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerengine = create_engine("mysql+pymysql://root:@127.0.0.1/learn_python",                       encoding="utf-8")                       Base = declarative_base()class User(Base):    __tablename__ = "user"  # 表明    id = Column(Integer, primary_key=True)    name = Column(String(32))    password = Column(String(64))    def __repr__(self):        return "<User(name=‘%s‘, password=‘%s‘)>" % (self.name, self.password)data = Session.query(User).filter(User.name=="Tom").all()    # 查詢user表中name為Tom的,所有資訊data = Session.query(User).filter_by(name="Tom").all()       # 查詢user表中name為Tom的,所有資訊data = Session.query(User.name).filter(User.id > 3).all()    # 查詢user表中id大於3的,namedata = Session.query(User).filter(User.id > 0).filter(User.id < 3).all()    # 多條件查詢data = Session.query(User).filter(User.id > 0).filter(User.name == "Tom").all()print(data)


修改資料

import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmaker# # 建立user表engine = create_engine("mysql+pymysql://root:@127.0.0.1/learn_python",                       encoding="utf-8")Base = declarative_base()   # 產生orm基類class User(Base):    __tablename__ = "user"  # 表明    id = Column(Integer, primary_key=True)    name = Column(String(32))    password = Column(String(64))    def __repr__(self):        return "<User(name=‘%s‘, password=‘%s‘)>" % (self.name, self.password)Session_class = sessionmaker(bind=engine)   # 建立與資料庫的會話session class,注意,這裡返回給session的是個class,不是執行個體Session = Session_class()                   # 產生session執行個體data = Session.query(User).filter_by(name="Tom").first()data.name = "Ben"Session.commit()


刪除資料

import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmaker# 建立user表engine = create_engine("mysql+pymysql://root:@127.0.0.1/learn_python",                       encoding="utf-8")Base = declarative_base()   # 產生orm基類class User(Base):    __tablename__ = "user"  # 表明    id = Column(Integer, primary_key=True)    name = Column(String(32))    password = Column(String(64))    def __repr__(self):        return "<User(name=‘%s‘, password=‘%s‘)>" % (self.name, self.password)Session_class = sessionmaker(bind=engine)   # 建立與資料庫的會話session class,注意,這裡返回給session的是個class,不是執行個體Session = Session_class()                   # 產生session執行個體data = Session.query(User).filter_by(name="Ben").first()Session.delete(data)Session.commit()


統計

import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmaker# 建立user表engine = create_engine("mysql+pymysql://root:@127.0.0.1/learn_python",                       encoding="utf-8")Base = declarative_base()   # 產生orm基類class User(Base):    __tablename__ = "user"  # 表明    id = Column(Integer, primary_key=True)    name = Column(String(32))    password = Column(String(64))    def __repr__(self):        return "<User(name=‘%s‘, password=‘%s‘)>" % (self.name, self.password)Session_class = sessionmaker(bind=engine)   # 建立與資料庫的會話session class,注意,這裡返回給session的是個class,不是執行個體Session = Session_class()                   # 產生session執行個體data = Session.query(User).filter(User.name.like("Ra%")).count()print(data)


分組

import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import func# 建立user表engine = create_engine("mysql+pymysql://root:@127.0.0.1/learn_python",                       encoding="utf-8")Base = declarative_base()   # 產生orm基類class User(Base):    __tablename__ = "user"  # 表明    id = Column(Integer, primary_key=True)    name = Column(String(32))    password = Column(String(64))    def __repr__(self):        return "<User(name=‘%s‘, password=‘%s‘)>" % (self.name, self.password)Session_class = sessionmaker(bind=engine)   # 建立與資料庫的會話session class,注意,這裡返回給session的是個class,不是執行個體Session = Session_class()                   # 產生session執行個體data = Session.query(func.count(User.name), User.name).group_by(User.name).all()print(data)


本文出自 “八英裡” 部落格,請務必保留此出處http://5921271.blog.51cto.com/5911271/1913920

Python之路51-sqlalchemy

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.