python自带模块连接数据库_Python使用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: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模块连接数据库操作示例相关推荐
- nodejs操作sqlserver数据_nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例...
本文实例讲述了nodejs基于mssql模块连接sqlserver数据库的简单封装操作.分享给大家供大家参考,具体如下: 注意:开启sqlserver服务器允许远程连接的步骤,自行百度,很多经验,no ...
- python打开文件并读取内容-Python实现的读取文件内容并写入其他文件操作示例
本文实例讲述了Python实现的读取文件内容并写入其他文件操作.分享给大家供大家参考,具体如下: 文件目录结构,如图: read_file.py是工作文件,file_test.py是读取文件源,wri ...
- python自带sqlite库_Python标准库之sqlite3使用实例
Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具.SQLite还在其它领域有广泛的应 ...
- python设计自定义栈类_Python如何自定义模块?Python基础教程,第十讲,自定义模块...
学完此次课程,我能做什么? 通过此次课程,我们将学会如何自定义自己的模块和包,以及如何引用到自己的项目中,从而实现代码的复用. 学习此次课程,需要多久? 5-10分钟 课程内容 什么是Python的标 ...
- python中importlib模块安装_Python中标准模块importlib详解
Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外 ...
- python模板引擎传迭代器_python之路 模块,序列化,迭代器,生成器
一.模块 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用python标准库的方法. 类似于函数式编程和面向过 ...
- python连接linux获取日志_Python 日志记录模块logging的使用
shell当中记录log,满眼花花的重定向符合,看着很不爽有没有!我喜欢Python,就是喜欢这种买个手电筒,备用电池都准备好了的感觉.logging模块很简单,导入模块,定义日志格式.代码中就可以通 ...
- python url模块介绍_python 中 urlparse 模块介绍
urlparse模块主要是用于解析url中的参数 对url按照一定格式进行 拆分或拼接 1.urlparse.urlparse 将url分为6个部分,返回一个包含6个字符串项目的元组:协议.位置.路 ...
- python调用带参函数_Python | 带有示例的函数调用类型
python调用带参函数 There are following types of function calls in python: python中有以下类型的函数调用: Call by value ...
最新文章
- 21天学通python pdf-21天学通Python PDF百度网盘资源下载
- 干货|Spring Cloud Bus 消息总线介绍
- php获取用户的上5级用户
- (一)FlexViewer之整体框架解析
- 毕设ssm商城系统_ssm商城系统(爱淘淘购物)项目源码
- 分析 js构造函数:对象方法 、类方法 、原型方法
- CSS基础汇总——点击标题跳转详细博客【学习笔记】
- php 压缩html css,PHP实现动态压缩js与css文件的方法
- [图形图像]一次光线追踪的尝试
- 时间序列分析-AR模型
- win10注册mscomm32.ocx失败解决方法
- 面向预测的时空数据学习方法分析
- #Logback入门 @FDDLC
- 【游戏逆向】游戏玩家技能冷却分析
- html 用css画出斑马线,CSS3实现斑马线、棋盘、格子复杂背景
- Android 图片处理
- SWAN测试用例botan/net2net-ed25519
- android电话遥控+android盒子,玩转Android盒子,空中鼠标才是绝配
- 正确在WPF中对Windows窗体背景进行设置
- 通用能力测试软件,个人通用能力测评