python的ORM技术:使用sqlalchemy操作mysql数据库

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: #!/usr/bin/env python# -*- coding: utf-8 -*-from sqlalchemy import Column, String, create_engine, Integer, Date, Float, ForeignKeyfrom sqlalchemy.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from sqlalchemy import Column, String, create_engine, Integer, Date, Float, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base

#######################################################################################################
##############初始化数据库连接,返回session
#######################################################################################################
def get_session():
    # 初始化数据库连接 # '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
    engine = create_engine('mysql+pymysql://root:root@10.10.10.11:9000/mysqldb?charset=utf8')
    DBSession = sessionmaker(bind=engine)  # 创建DBSession类型
    session = DBSession()
    return session



#######################################################################################################
##############表格对象创建
#######################################################################################################
###创建对象的基类:
Base = declarative_base()

###定义Asset表对象
class Asset(Base):
    # 表的名字:
    __tablename__ = 'hr_asset'

    # 表的结构:
    id = Column(Integer, primary_key=True)
    assetnum = Column(String(50))
    assetname = Column(String(50))
    assetmodel = Column(String(50))
    assettype = Column(Integer)
    assetstate =  Column(Integer)
    usepersonid = Column(Integer, ForeignKey("hr_user.id"))
    userperson = relationship("User",backref="asset", uselist=False)


####定义User表对象
class User(Base):
    # 表的名字:
    __tablename__ = 'hr_user'

    # 表的结构:
    id = Column(Integer, primary_key=True)
    username = Column(String(50))
    age =  Column(Integer)
    degree = Column(String(50))



#######################################################################################################
##############数据操作模板
########################################################################################################
####INSERT插入数据  模板
if __name__ == "__main__":
    try:
      # 创建session对象
      session1 = get_session()
      # 创建新表格对象
      new_user = User(username='龙九', age=33, degree="本科")
      # 添加到session
      session1 .add(new_user)
      # 提交即保存到数据库
      session1 .commit()
      # 得到新数据id  
      the_id=new_user.id    
      # 关闭session
      session1 .close()
    except:
        pass



####DELETE删除数据  模板
if __name__ == "__main__":
    try:
        session2 = get_session()
        session2.query(User).filter(User.id == '3').delete()
        session2.commit()
        session2.close()
    except:
        pass

####UPDATE更新数据  模板
if __name__ == "__main__":    #模板1
    try:
        session3 = get_session()
        session3.query(User).filter(User.id == '2').update({User.degree: '高中'}, synchronize_session=False)
        session3.commit()
        session3.close()
    except:
        pass




if __name__ == "__main__":   #模板2   
    try:
        session3 = get_session()
        the_user = session3.query(User).get(2)  #参数为主键id
        the_user.username ="小王"
        the_user.age= 40
        the_user.degree ="博士"
        session3.commit()
        session3.close()
    except:
        pass


####SELECT查询数据之单条数据 模板
if __name__ == "__main__":
    try:
        session4 = get_session()
        user = session4.query(User).filter(User.id == 3).one()    #注:这里用one()
        print('type:', type(user))
        print('name:', user.username)
        session4.close()
    except:
        pass



####SELECT查询数据之多条数据 模板
if __name__ == "__main__":
    try:
        session5 = get_session()
        users = session5.query(User).filter(User.id > 0).all()    #注:这里用all()
        for i in range(len(users)):
            print(users[i].id)
            print(users[i].username)
        session5.close()
    except:
        pass

####SELECT查询数据之连表查询 模板
if __name__ == "__main__":
    try:
        session6 = get_session()
        assets = session6.query(Asset).join(User).filter(User.id > 0).all()
        for i in range(len(assets)):
            pass
        session6.close()
    except:
        pass
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22小时前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
4天前
|
Python
Python中赋值使地址一样的技术探究
Python中赋值使地址一样的技术探究
18 0
|
4天前
|
算法 Python
Python中不使用sort对列表排序的技术
Python中不使用sort对列表排序的技术
16 1
|
4天前
|
数据采集 编解码 数据挖掘
使用Python进行多次降采样技术
使用Python进行多次降采样技术
9 1
|
5天前
|
数据可视化 Python
Python中的等值线平滑处理技术
Python中的等值线平滑处理技术
12 2
|
9天前
|
SQL 存储 关系型数据库
【MySQL】DDL的表操作详解:创建&查询&修改&删除
【MySQL】DDL的表操作详解:创建&查询&修改&删除
|
10天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】机器学习中的模型融合技术
【4月更文挑战第30天】模型融合,即集成学习,通过结合多个模型提升预测性能。常见方法包括:Bagging(如Random Forest)、Boosting(如AdaBoost、XGBoost)和Stacking。Python中可使用`scikit-learn`实现,例如BaggingClassifier示例。模型融合是机器学习中的强大工具,能提高整体性能并适应复杂问题。
|
10天前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】机器学习中的超参数调优技术
【4月更文挑战第30天】本文探讨了机器学习中超参数调优的重要性,介绍了网格搜索、随机搜索、贝叶斯优化和AutoML等调优方法,并提供了Python中使用`scikit-learn`进行网格搜索的示例。超参数的选择直接影响模型学习和泛化能力,而调优技术能帮助找到最佳组合,提升模型性能。随着AutoML的发展,自动化调参将成为更高效的选择。
|
10天前
|
机器学习/深度学习 算法 算法框架/工具
【Python机器学习专栏】深度学习中的正则化与优化技术
【4月更文挑战第30天】本文探讨了深度学习中的正则化和优化技术,以提升模型的泛化能力和训练效率。正则化包括L1和L2正则化以及Dropout,防止过拟合。优化技术涵盖梯度下降法、动量法和Adam优化器,加速模型收敛。Python示例展示了如何在Keras中应用这些技术,如L2正则化、Dropout及Adam优化器。
|
10天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】数据标准化与归一化技术
【4月更文挑战第30天】在机器学习中,数据预处理的两大关键步骤是标准化和归一化,旨在调整数据范围以优化算法性能。标准化将数据缩放到特定区间,如[-1, 1]或[0, 1],适合基于距离的算法,如KNN、SVM。归一化则将数据线性变换到[0, 1],保持相对关系。Python中可使用`sklearn.preprocessing`的`MinMaxScaler`和`StandardScaler`实现这两种操作。选择哪种方法取决于数据分布和算法需求。预处理能提升模型理解和性能,增强预测准确性和可靠性。