本文实例讲述了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:password@hostname: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:password@hostname:port/dbname",echo=True) # mysql+pymysql

engine = create_engine('mssql+pymssql://username:password@hostname:port/dbname',echo=True) # mssql+pymssql

engine = create_engine('postgresql://scott:tiger@hostname:5432/dbname') # postgresql示例

engine = create_engine('oracle://scott:tiger@hostname:1521/sidname') # oracle

engine = create_engine('oracle+cx_oracle://scott:tiger@tnsname') #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:a@orclpdb',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 '' % (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()) # [, ]

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使用sqlalchemy模块连接数据库操作示例相关推荐

  1. nodejs操作sqlserver数据_nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例...

    本文实例讲述了nodejs基于mssql模块连接sqlserver数据库的简单封装操作.分享给大家供大家参考,具体如下: 注意:开启sqlserver服务器允许远程连接的步骤,自行百度,很多经验,no ...

  2. python打开文件并读取内容-Python实现的读取文件内容并写入其他文件操作示例

    本文实例讲述了Python实现的读取文件内容并写入其他文件操作.分享给大家供大家参考,具体如下: 文件目录结构,如图: read_file.py是工作文件,file_test.py是读取文件源,wri ...

  3. python自带sqlite库_Python标准库之sqlite3使用实例

    Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具.SQLite还在其它领域有广泛的应 ...

  4. python设计自定义栈类_Python如何自定义模块?Python基础教程,第十讲,自定义模块...

    学完此次课程,我能做什么? 通过此次课程,我们将学会如何自定义自己的模块和包,以及如何引用到自己的项目中,从而实现代码的复用. 学习此次课程,需要多久? 5-10分钟 课程内容 什么是Python的标 ...

  5. python中importlib模块安装_Python中标准模块importlib详解

    Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外 ...

  6. python模板引擎传迭代器_python之路 模块,序列化,迭代器,生成器

    一.模块 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用python标准库的方法. 类似于函数式编程和面向过 ...

  7. python连接linux获取日志_Python 日志记录模块logging的使用

    shell当中记录log,满眼花花的重定向符合,看着很不爽有没有!我喜欢Python,就是喜欢这种买个手电筒,备用电池都准备好了的感觉.logging模块很简单,导入模块,定义日志格式.代码中就可以通 ...

  8. python url模块介绍_python 中 urlparse 模块介绍

    urlparse模块主要是用于解析url中的参数  对url按照一定格式进行 拆分或拼接 1.urlparse.urlparse 将url分为6个部分,返回一个包含6个字符串项目的元组:协议.位置.路 ...

  9. python调用带参函数_Python | 带有示例的函数调用类型

    python调用带参函数 There are following types of function calls in python: python中有以下类型的函数调用: Call by value ...

最新文章

  1. 21天学通python pdf-21天学通Python PDF百度网盘资源下载
  2. 干货|Spring Cloud Bus 消息总线介绍
  3. php获取用户的上5级用户
  4. (一)FlexViewer之整体框架解析
  5. 毕设ssm商城系统_ssm商城系统(爱淘淘购物)项目源码
  6. 分析 js构造函数:对象方法 、类方法 、原型方法
  7. CSS基础汇总——点击标题跳转详细博客【学习笔记】
  8. php 压缩html css,PHP实现动态压缩js与css文件的方法
  9. [图形图像]一次光线追踪的尝试
  10. 时间序列分析-AR模型
  11. win10注册mscomm32.ocx失败解决方法
  12. 面向预测的时空数据学习方法分析
  13. #Logback入门 @FDDLC
  14. 【游戏逆向】游戏玩家技能冷却分析
  15. html 用css画出斑马线,CSS3实现斑马线、棋盘、格子复杂背景
  16. Android 图片处理
  17. SWAN测试用例botan/net2net-ed25519
  18. android电话遥控+android盒子,玩转Android盒子,空中鼠标才是绝配
  19. 正确在WPF中对Windows窗体背景进行设置
  20. 通用能力测试软件,个人通用能力测评

热门文章

  1. Tmux 配置:打造最适合自己的终端复用工具
  2. 计算沙盒下文件夹内容大小 清空沙盒 文件 目录
  3. Biztalk中使用SQL适配器获取数据并用web服务发布的例子
  4. Flash ActionScript 2.0基础教程
  5. [名人观点--刘振飞] bug管理
  6. redis用HyperLogLog计算UV
  7. Ancient Berland Circus CodeForces - 1C
  8. Sharepoint 自定义搜索
  9. 面向对象第四单元总结和期末总结
  10. 解决Ajax中IE浏览器缓存问题