1. Python使用sqlalchemy模块连接数据库操作示例

     更新时间:2019年03月13日 11:17:16   作者:xuejianbest   我要评论

    这篇文章主要介绍了Python使用sqlalchemy模块连接数据库操作,结合实例形式分析了sqlalchemy模块的安装及连接、调用数据库相关操作技巧,需要的朋友可以参考下

    本文实例讲述了Python使用sqlalchemy模块连接数据库操作。分享给大家供大家参考,具体如下:

    安装:

    pip install sqlalchemy
    # 安装数据库驱动:
    pip install pymysql
    pip install cx_oracle
    
    

    举例:(在url后面加入?charset=utf8可以防止乱码)

    from sqlalchemy import create_engine
    engine=create_engine('mysql+pymysql://username:[email protected]:port/dbname', echo=True) #echo=True 打印sql语句信息
    
    

    create_engine接受一个url,格式为:

    # '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
    # 常用的
    engine = create_engine('sqlite:///:memory:', echo=True)   # sqlite内存
    engine = create_engine('sqlite:///./cnblogblog.db',echo=True) # sqlite文件
    engine = create_engine("mysql+pymysql://username:[email protected]:port/dbname",echo=True) # mysql+pymysql
    engine = create_engine('mssql+pymssql://username:[email protected]:port/dbname',echo=True) # mssql+pymssql
    engine = create_engine('postgresql://scott:[email protected]:5432/dbname') # postgresql示例
    engine = create_engine('oracle://scott:[email protected]:1521/sidname') # oracle
    engine = create_engine('oracle+cx_oracle://scott:[email protected]') #pdb就可以用tns连接
    
    

    简单demo:

    from sqlalchemy import create_engine, Column, Integer, String
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base 
    engine = create_engine('oracle://spark:[email protected]',echo=True) #echo要求打印sql语句等调试信息
    session_maker = sessionmaker(bind=engine)
    session = session_maker()
    Base = declarative_base()
    #对应一张表
    class Student(Base): 
      __tablename__ = 'STUDENT'
      id = Column('STUID', Integer, primary_key=True)
      name = Column('STUNAME', String(32), nullable=False)
      age = Column('STUAGE', Integer)
      def __repr__(self):
        return '<Student(id:%s, name:%s, age:%s)>' % (self.id, self.name, self.age)
    Base.metadata.create_all(engine) #若存在STUDENT表则不做,不存在则创建。
    queryObject = session.query(Student).order_by(Student.id.desc())
    for ins in queryObject:
      print(ins.id, ins.name, ins.age)
    '''
    4 hey 24
    3 lwtxxs 27
    2 gyb 89
    1 ns 23
    '''
    
    

    将查询结果映射为DataFrame:

    import pandas as pd
    df = pd.read_sql(session.query(Student).filter(Student.id > 1).statement, engine) 
    print(df)
    '''
      STUID STUNAME STUAGE
    0   4   hey   24
    1   2   gyb   89
    2   3 lwtxxs   27
    '''
    
    

    查询:

    session的query方法除了可以接受Base子类对象作为参数外,还可以是字段,如:

    query = session.query(Student.name, Student.age) # query为一个sqlalchemy.orm.query.Query对象
    for stu_name, stu_age in query:
      print(stu_name, stu_age)
    
    

    查询条件filter:

    # = / like
    query.filter(Student.name == 'wendy')
    query.filter(Student.name.like('%ed%'))
    # in
    query.filter(Student.name.in_(['wendy', 'jack']))
    query.filter(Student.name.in_(
        session.query(User.name).filter(User.name.like('%ed%'))
    ))
    # not in
    query.filter(~Student.name.in_(['ed', 'wendy', 'jack']))
    # is null / is not null
    query.filter(Student.name == None)
    query.filter(Student.name.is_(None))
    query.filter(Student.name != None)
    query.filter(Student.name.isnot(None))
    # and
    from sqlalchemy import and_, or_
    query.filter(and_(Student.name == 'ed', Student.age != 23))
    query.filter(Student.name == 'ed', Student.age != 23)
    query.filter(Student.name == 'ed').filter(Student.age != 23)
    # or
    query.filter(or_(Student.name == 'ed', Student.name == 'wendy'))
    # match
    query.filter(Student.name.match('wendy'))
    
    

    Query的方法:

    all()方法以列表形式返回结果集:

    from sqlalchemy import or_, and_
    queryObject = session.query(Student).filter(or_(Student.id == 1, Student.id == 2))
    print(queryObject.all())  # [<Student(id:1, name:ns, age:23)>, <Student(id:2, name:gyb, age:89)>]
    queryObject = session.query(Student.name).filter(or_(Student.id == 1, Student.id == 2))
    print(queryObject.all())  # [('ns',), ('gyb',)]
    
    

    first()方法返回单个结果。(若结果集为空则返回None)

    print(queryObject.first())  # ('ns',)
    
    

    one()方法返回单个结果,与first()方法不同的是:当结果集中没有元素或有多于一个元素会抛出异常。
    one_or_none()方法同one()一样,不同是结果集为空则返回None,为多个抛出异常。

    查询数量:

    from sqlalchemy import func
    session.query(func.count(Student.id)).scalar() # SELECT count("STUDENT"."STUID") AS count_1 FROM "STUDENT"
    
    

    分组:

    session.query(func.count(Student.id), Student.name).group_by(Student.name).all()
    
    

    嵌套SQL语句:

    from sqlalchemy import text
    query = session.query(Student.id, Student.name).filter(text('stuid>2'))
    query = session.query('stuid', 'stuname', 'stuage').from_statement(\
    text("select * from student where stuname=:stuname")).params(stuname='hey').all()  #[(4, 'hey', 24)]
    
    

    更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

    希望本文所述?#28304;?#23478;Python程序设计有所帮助。

    相关文章

    • Python中获取网页状态码的两个方法

      Python中获取网页状态码的两个方法

      这篇文章主要介绍了Python中获取网页状态码的两个方法,分别使用urllib模块和requests模块实现,需要的朋友可以参考下
      2014-11-11
    • Python常用的爬虫技巧总结

      Python常用的爬虫技巧总结

      本文给大家汇总介绍了Python编写爬虫的时候经常需要用到的一些技巧,非常的实用,有需要的小伙伴可以参考下
      2016-03-03
    • 简述Python中的面向对象编程的概念

      简述Python中的面向对象编程的概念

      这篇文章主要介绍了简述Python中的面向对象编程的概念,面向对象编程是Python的重要特性,需要的朋友可以参考下
      2015-04-04
    • Python Pandas批量读取csv文件到dataframe的方法

      Python Pandas批量读取csv文件到dataframe的方法

      这篇文章主要介绍了Python Pandas批量读取csv文件到dataframe的方法,需要的朋友可以参考下
      2018-10-10
    • python 如何快速?#39029;?#20004;个电子表中数据的差异

      python 如何快速?#39029;?#20004;个电子表中数据的差异

      下面小编就为大家带来一篇python 如何快速?#39029;?#20004;个电子表中数据的差异。小编觉得挺不错?#27169;?#29616;在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
      2017-05-05
    • python中set常用操作汇总

      python中set常用操作汇总

      python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算
      2016-06-06
    • Windows系统下使用flup搭建Nginx和Python环境的方法

      Windows系统下使用flup搭建Nginx和Python环境的方法

      这篇文章主要介绍了Windows系统下使用flup搭建Nginx和Python环境的方法,文中使用到了flup这个Python的FastCGI工具,需要的朋友可以参考下
      2015-12-12
    • Python爬虫中urllib库的进阶学习

      Python爬虫中urllib库的进阶学习

      本篇文章主要介绍了Python爬虫中urllib库的进阶学习内容,?#28304;?#26377;兴趣的朋友赶紧学习分享下。
      2018-01-01
    • Python入门篇之字符串

      Python入门篇之字符串

      可能大多数人在学习C语言的时候,最先接触的数据类型就是字符串,因为大多教程都是以"Hello world"这个程序作为入门程序,这个程序中要打印的"Hello world"就是字符串。今天我们来了解一下Python中的字符串,看看它的用法。
      2014-10-10
    • 简单介绍Python中的floor()方法

      简单介绍Python中的floor()方法

      这篇文章主要介绍了Python中的floor()方法,是Python入门的基础知识,需要的朋友可以参考下
      2015-05-05

    最新评论

    山东群英会开奖查询