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


Posted in Python onMarch 13, 2019

本文实例讲述了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 '<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 实现归并排序算法
Jun 05 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
python3操作微信itchat实现发送图片
Feb 24 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
Python跳出多重循环的方法示例
Jul 03 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
Python属性和内建属性实例解析
Jan 14 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
Python的scikit-image模块实例讲解
Dec 30 Python
python 数据类型强制转换的总结
Jan 25 Python
python ---lambda匿名函数介绍
Mar 13 #Python
Python实现的列表排序、反转操作示例
Mar 13 #Python
Python实现的调用C语言函数功能简单实例
Mar 13 #Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 #Python
浅谈python标准库--functools.partial
Mar 13 #Python
Python3实现的简单三级菜单功能示例
Mar 12 #Python
Python3实现的简单工资管理系统示例
Mar 12 #Python
You might like
用PHP+MySql编写聊天室
2006/10/09 PHP
php自动跳转中英文页面
2008/07/29 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
php查询whois信息的方法
2015/06/08 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
js Calender控件使用详解
2015/01/05 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
车工岗位职责
2013/11/26 职场文书
一名毕业生的自我鉴定
2013/12/04 职场文书
个人培训自我鉴定
2014/03/28 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
人事任命书范文
2014/06/04 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
现货白银电话营销话术
2015/05/29 职场文书
2015入党自传格式范文
2015/06/26 职场文书