python的ORM技术:使用sqlalchemy操作mysql数据库_python里sqlalchemy如何操作mysql数据库-程序员宅基地

技术标签: python  PYQT开发  ORM  

#!/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:[email protected]: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
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_20265805/article/details/82109642

智能推荐

APP专项测试之耗电量测试_app电量测试-程序员宅基地

文章浏览阅读6.9k次。一、耗电量测试分析相对于PC端来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为重要。Android的很多特性都比较耗电(如屏幕、GPS、sensor传感器、唤醒机制、CPU、连网等的使用),我们必须要慎重检查APP的电量使用,以免导致用户手机耗电发热,带来不良体验。1、耗电场景主要的耗电场景有: cpu:复杂的运算逻辑、死循环等会直接导致CPU负载过高,会导致耗电; wakelock:只要有应用拿到wakelock这个锁,系统就无法进入睡眠状态。频繁wakelock或_app电量测试

C++的左值和右值及C++11新特性:移动构造_cv修饰-程序员宅基地

文章浏览阅读389次。本文转载于:https://blog.csdn.net/xuwqiang1994/article/details/79924310http://c.biancheng.net/view/7847.html确实有点恶心加难,可以多读几遍,多多思考~左值和右值:翻译至https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c/C/C++编程中不是经常出现术语(左值)和rvalue_cv修饰

python爬虫爬取博客_Python爬虫入门教程——爬取自己的博客园博客-程序员宅基地

文章浏览阅读340次。互联网时代里,网络爬虫是一种高效地信息采集利器,可以快速准确地获取网上的各种数据资源。本文使用Python库requests、Beautiful Soup爬取博客园博客的相关信息,利用txt文件转存。基础知识:网络爬虫是一种高效地信息采集利器,利用它可以快速、准确地采集互联网上的各种数据资源,几乎已经成为大数据时代IT从业者的必修课。简单点说,网络爬虫就是获取网页并提取和保存信息的自动化过程,分为..._python爬取博客网400

ODBC, OLEDB, ADO, ADO.Net的演化简史-程序员宅基地

文章浏览阅读577次。ODBC, OLEDB, ADO, ADO.Net的演化简史Copy&Paste了一下午,终于一蹴而就此文,嘿嘿...1.演变历史它们是按照这个时间先后的顺序逐步出现的,史前->ODBC->OLEDB->ADO->ADO.Net。看看Wiki上的MDAC定义:“Microsoft Data Access Components(MDAC)是微软专门为数据访问功能而发展的应用程

SSH常见面试题_ssh面试题-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏26次。1、项目中为什么使用SSH框架?使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;另外struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率。 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。 使用Spring:因为spring基于IoC(Inversion of Control,反向控制)和AOP构架多层j2ee_ssh面试题

华为OD机试注意事项,来自已考人员的经验_华为机试能用另一台电脑搜答案吗-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏17次。由于华为 Od 机试从收到邮件开始,一周内都有效,所以每天都有人在参加机试,本系列文章将为大家同步每日的机考最新信息,相信这些对你一定有所帮助。华为 OD 机试天天考,是不是明天就轮到你了?_华为机试能用另一台电脑搜答案吗

随便推点

小学语文阅读教学育人价值研究实施方案_三年级下语文具有育人价值的案例-程序员宅基地

本研究旨在探讨小学语文阅读教学中的育人价值,并提出了实施方案。方案包括购置理论书籍、学习资料,外出交流学习,举办研讨会议等。同时,学校建立了激励机制,对课题研究人员制定了激励措施,并将课题研究作为评先、评优和晋级的主要依据。学校还为教师提供了时间、政策及其他条件的保证。

Axios请求头携带token验证_axios请求带token-程序员宅基地

文章浏览阅读3.4k次。axios请求头携带token_axios请求带token

TouchScript中文--- Input Sources_touchscript.inputsources.inputhandlers.windowspoin-程序员宅基地

文章浏览阅读1.9k次。github英文:https://github.com/TouchScript/TouchScript/wiki/Input-SourcesInput SourcesIn TouchScript all input comes fromInput Sources, i.e. objects implementingIInputSourceinterface. After a tou..._touchscript.inputsources.inputhandlers.windowspointerhandler.setscaling () t

ImageMagick远程代码执行漏洞分析-程序员宅基地

文章浏览阅读7.6k次。1. 漏洞描述漏洞编号: CVE-2016-3714发现人员: Slack安全工程师Ryan Hube漏洞简述: 产生原因是因为字符过滤不严谨所导致的执行代码. 对于文件名传递给后端的命令过滤不足,导致允许多种文件格式转换过程中远程执行代码。影响版本: ImageMagick6.5.7-8 2012-08-17ImageMagick6.7.7-10 2014-03-06低版本至6.9_imagemagick远程代码执行漏洞

IIS5.1安装说明:_win2008安装iis5.1-程序员宅基地

文章浏览阅读511次。IIS5.1安装说明:一: IIS 5.1版本适用于Windows XP_SP1、XP_SP2、XP_SP3二: ISS 5.1安装步骤(各版本IIS都可以按照该方法安装,以IIS5.1安装至Windows xp_SP3为例) 1.依次打开_win2008安装iis5.1

彻底解决_OBJC_CLASS_$_某文件名", referenced from:问题__objc_class_$plsuploaderconfiguration-程序员宅基地

文章浏览阅读1.8k次。最近在使用静态库时,总是出现这个问题。下面总结一下我得解决方法:1. .m文件没有导入 在Build Phases里的Compile Sources 中添加报错的文件 2. .framework文件没有导入静态库编译时往往需要一些库的支持,查看你是否有没有导入的库文件同样是在Build Phases里的Link Binary With Librari__objc_class_$plsuploaderconfiguration