当前位置:Gxlcms > 数据库问题 > SQLAlchemy

SQLAlchemy

时间:2021-07-01 10:21:17 帮助过:5人阅读

虽然小弟是个小菜鸟,虽然小弟对数据库没有见多识广,但说心里话当我看到SQLAlchemy这个架构设计时,真的有一种神奇的感觉。简洁明了,逻辑清晰。原谅小弟lowB的心态。最关键的是不需要再研究那些复杂繁琐的数据库操作细节了。

技术分享

使用SQLAlchemy操作数据库的方式方法有很多种,如通过执行原生SQL语句操作,通过对象操作等。但是在这里只介绍一种最终执行结果的操作,而不是类似中间状态的一些操作。

 

一、基本操作

使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。

#!/usr/bin/env python
# _*_coding:utf-8 _*_

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine


Base = declarative_base()
engine = create_engine("mysql+mysqldb://root:123456@192.168.1.106:3306/test1", max_overflow=5, echo=True)


class Host(Base):   # 这个类就是一个表,这里只是映射成功了
    __tablename__ = ‘hosts‘
    id = Column(Integer, primary_key=True, autoincrement=True)
    hostname = Column(String(64), unique=True, nullable=False)
    ip_addr = Column(String(128), unique=True, nullable=False)
    prot = Column(Integer, default=22)


# 寻找Base的所有子类,按照子类的结构在数据库中生成对应的数据表信息
Base.metadata.create_all(engine)  # 创建所有的表结构


if __name__ == ‘__main__‘:

    SessionCls = sessionmaker(bind=engine)   # 创建与数据库会话的session class,返回的是一个类,而不是一个实例
    session = SessionCls()    # 连接数据库的实例,就是用它来对数据库做实际的操作

# ###################### 增 #############################

    # 创建表中数据的实例
    # h1 = Host(hostname=‘localhost‘, ip_addr=‘127.0.0.1‘)
    # h2 = Host(hostname=‘centos‘, ip_addr=‘172.16.16.166‘)

    # session.add(h1)   # 单条创建
    # session.add_all([h1, h2])   # 批量创建
    # session.commit()    # 真正的提交数据库操作

# ###################### 查 ###########################

    # obj = session.query(Host).filter(Host.hostname == ‘centos‘).all()
    # print obj
    # ret = session.query(User).filter_by(name=‘sb‘).first()

    # ret = session.query(User).filter_by(name=‘sb‘).all()

    # ret = session.query(User).filter(User.name.in_([‘sb‘,‘bb‘])).all()

    # ret = session.query(User.name.label(‘name_label‘)).all()
    # print ret,type(ret)

    # ret = session.query(User).order_by(User.id).all()

    # ret = session.query(User).order_by(User.id)[1:3]

    # session.commit()

# ###################### 删除 ###########################

    # obj = session.query(Host).filter(Host.hostname == ‘centos‘).first()
    # session.delete(obj)
    #
    # session.commit()


# ###################### 更新 ###########################

    # obj = session.query(Host).filter_by(hostname=‘localhost‘).first()
    # obj.hostname = "chenchao"
    # print obj
    # session.commit()

 

更多功能参见文档,猛击这里下载PDF

 

SQLAlchemy

标签:

人气教程排行