开发者社区> 一心狮> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: #!/usr/bin/env python # -*- coding: utf-8 -*- from sqlalchemy import Column, String, create_engine, Integer, Date, Float, ForeignKey from 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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
虚言妙诀终虚见,面试躬行是致知,Python技术面试策略与技巧实战记录
2023年,对于正在找工作的朋友来说,今年的就业季显得更加具有挑战性,更有意思的是,每当这个时候,各种面试经验分享就如同过江之鲫一般,俯拾皆是,因为例子过多,兹不细举。然而这些面试经验大部分都停留在理论阶段,这就造成了一个问题:理论和实际,到底有多大出入?我国古代大名仕曾文正公曾经说:“天下事,在局外呐喊议论,总是无益,必须躬身入局,挺膺负责,方有成事之可冀。”革命先烈李大钊先生也曾感叹:“凡事都要脚踏实地去作,不驰于空想,不骛于虚声,而惟以求真的态度作踏实的工夫。以此态度求学,则真理可明,以此态度做事,则功业可就。”所以本次我们来进行一次真实的线上面试,正所谓空谈误国,实干兴邦,能够检验真理
0 0
加载速度提升 15%,关于 Python 启动加速探索与实践的解析 | 龙蜥技术
PyCDS(代码对象共享)技术,将三方库的加载速度提升至与Python 3.11内置模块持平的速度。
0 0
解读最佳实践:倚天710 ARM芯片的Python+AI算力优化 | 龙蜥技术
如何整合 Python+AI 的相关软件并使其在该平台上发挥最高的性能?
0 0
热加载技术:修改Python代码并实时查看结果 ⛵
本文讲解Python热加载技术,以及Reloading工具库的使用。暂停运行的代码,修改补充后重新运行,意味着训练了数个小时的模型参数被舍弃。热加载技术可以解决这个问题。
0 0
云从科技研究院视觉算法实习技术面试-python题-python列表推导式的使用写法
云从科技研究院视觉算法实习技术面试-python题-python列表推导式的使用写法
0 0
【Python基础之函数:多层语法糖、装饰器和装饰器修复技术及递归函数】
【Python基础之函数:多层语法糖、装饰器和装饰器修复技术及递归函数】
0 0
CTO 技术共享整理出来的十个 Python 自动化脚本
CTO 技术共享整理出来的十个 Python 自动化脚本
0 0
2022 技术趋势报告:C++ 重新“受宠”| “data”、“Python”、“Java”上榜热搜词 | 安全话题备受关注
2022 技术趋势报告:C++ 重新“受宠”| “data”、“Python”、“Java”上榜热搜词 | 安全话题备受关注
0 0
Python爬虫有什么用?这门技术主要做什么?
Python爬虫要做什么呢?接下来跟大家聊聊这个话题
0 0
Python黑科技系列13-登录验证码识别技术
世界软件业巨头、微软公司创办人比尔·盖茨说:“人生是不公平的,习惯去接受它吧。请记住,永远都不要抱怨!” 每个人都是独一无二的,在这世界上你也真的很好,很优秀,因为你是唯一的。
0 0
+关注
一心狮
python编程
文章
问答
文章排行榜
最热
最新
相关电子书
更多
给运维工程师的Python实战课
立即下载
Python 脚本速查手册
立即下载
ACE 区域技术发展峰会:Flink Python Table API入门及实践
立即下载