python2.7连接sqlserver数据库(Python使用sqlalchemy模块连接数据库操作示例)
类别:脚本大全 浏览量:869
时间:2021-11-05 14:49:24 python2.7连接sqlserver数据库
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 '<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程序设计有所帮助。
原文链接:https://blog.csdn.net/xuejianbest/article/details/85159552
您可能感兴趣
- python3.7不兼容pywinauto(浅谈python编译pyc工程--导包问题解决)
- python怎么判断文件大小(python3实现指定目录下文件sha256及文件大小统计)
- python中的冒号怎么看(python 列表中[ ]中冒号‘:’的作用)
- python实时输出图像(Python给图像添加噪声具体操作)
- python怎么操作mysql(详解Python的数据库操作pymysql)
- python多线程有两个参数怎么传(python从子线程中获得返回值的方法)
- python模块使用方法(详解python的argpare和click模块小结)
- python strip用法(Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析)
- python 二叉树的深度遍历(python 将有序数组转换为二叉树的方法)
- python高级面试题及答案(python面试题小结附答案实例代码)
- python3html怎么转换成pdf(Python实现html转换为pdf报告生成pdf报告功能示例)
- python批量创建字典(Python编写合并字典并实现敏感目录的小脚本)
- python 多进程读取文件(Python实现的多进程拷贝文件并显示百分比功能示例)
- python中如何遍历键(Python中按值来获取指定的键)
- python导出数据到mysql(python定时按日期备份MySQL数据并压缩)
- python字符串相似度匹配(Python实现字符串匹配的KMP算法)
- 览邦G08 Plus SMART WATCH 测评⑱ 全独立这才是智能手表该有的样子(览邦G08PlusSMART)
- 荣耀手表 GS 3 真机亮相 不支持无线充电(荣耀手表GS3)
- 通过体温就能为智能手表充电 原来是用NASA在空间站用的黑科技(通过体温就能为智能手表充电)
- 智能手表兼容Windows和Android 无需充电挑战苹果(智能手表兼容Windows和Android)
- 一天一冲也算表 麦步,一款待机 21 天的智能手表体验评测(一天一冲也算表)
- 魅族智能手表充电座曝光 Type-C 接口,线座分离设计(魅族智能手表充电座曝光)
热门推荐
- 在sqlserver中如何看表格的类型(SQL Server 中的数据类型隐式转换问题)
- php代码最可靠的加密方式(php DES加密算法实例分析)
- vue界面自动生成(Vue中实现3D标签云的详细代码)
- 如何用thinkphp框架来写一个网站(php tpl模板引擎定义与使用示例)
- 简述python2与python3的不同点(Python2与Python3的区别实例分析)
- python发送微信消息脚本(python实现微信每日一句自动发送给喜欢的人)
- html5视频播放代码详解(HTML5基于flash实现播放RTMP协议视频的示例代码)
- nginx跳转规则配置上下文(基于nginx实现上游服务器动态自动上下线无需reload的实现方法)
- html5 页面向上滑动(html5手机键盘弹出收起的处理)
- apache服务部署tomcat(Apache与Tomcat服务器整合的基本配置方法及概要说明)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9