解决一个pandas执行模糊查询sql的坑

查询引擎使用了presto,在sql中使用了模糊查询。

engine = create_engine(presto_url,encoding='utf-8')
sql_exe ="""select id,title,tags from source.base.table where tags like '%呵呵%' """
df = pd.read_sql_query(sql_exe,engine)

一直报错:

unsupported format character

解决方案

第一:

sql_exe ="""select id,title,tags from source.base.table where tags like '%%呵呵%%' """

第二:

sql_exe ="""select id,title,tags from source.base.table where tags like %s """
 df = pd.read_sql_query(sql_exe,engine,params=("%呵呵%",))

补充:pd.read_sql()知道这些就够用了

如下:

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)

各参数意义

sql:SQL命令字符串

con:连接sql数据库的engine,一般可以用SQLalchemy或者pymysql之类的包建立

index_col: 选择某一列作为index

coerce_float:非常有用,将数字形式的字符串直接以float型读入

parse_dates:将某一列日期型字符串转换为datetime型数据,与pd.to_datetime函数功能类似。可以直接提供需要转换的列名以默认的日期形式转换,也可以用字典的格式提供列名和转换的日期格式,比如{column_name: format string}(format string:"%Y:%m:%H:%M:%S")。

columns:要选取的列。一般没啥用,因为在sql命令里面一般就指定要选择的列了

chunksize:如果提供了一个整数值,那么就会返回一个generator,每次输出的行数就是提供的值的大小。

设置参数can–>创建数据库链接的两种方式

用sqlalchemy构建数据库链接

import pandas as pd
import sqlalchemy
from sqlalchemy import create_engine
# 用sqlalchemy构建数据库链接engine
connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'
engine = create_engine(connect_info)
# sql 命令
sql_cmd = "SELECT * FROM table"
df = pd.read_sql(sql=sql_cmd, con=engine)

用DBAPI构建数据库链接

import pandas as pd
import pymysql
# sql 命令
sql_cmd = "SELECT * FROM table"
# 用DBAPI构建数据库链接engine
con = pymysql.connect(host=localhost, user=username, password=password, database=dbname, charset='utf8', use_unicode=True)
df = pd.read_sql(sql_cmd, con)

read_sql与read_sql_table、read_sql_query

read_sql本质上是read_sql_table、read_sql_query的统一方式。

三者都return返回DataFrame。

1、read_sql_table

Read SQL database table into a DataFrame.

2、read_sql_query

Read SQL query into a DataFrame.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Pandas 模糊查询与替换的操作

    主要用到的工具:Pandas .fuzzywuzzy Pandas:是基于numpy的一种工具,专门为分析大量数据而生,它包含大量的处理数据的函数和方法, 以下为pandas中文API: 缩写和包导入 在这个速查手册中,我们使用如下缩写: df:任意的Pandas DataFrame对象 s:任意的Pandas Series对象 同时我们需要做如下的引入: import pandas as pd import numpy as np 导入数据 pd.read_csv(filename):从CSV

  • Python遍历pandas数据方法总结

    前言 Pandas是python的一个数据分析包,提供了大量的快速便捷处理数据的函数和方法.其中Pandas定义了Series 和 DataFrame两种数据类型,这使数据操作变得更简单.Series 是一种一维的数据结构,类似于将列表数据值与索引值相结合.DataFrame 是一种二维的数据结构,接近于电子表格或者mysql数据库的形式. 在数据分析中不可避免的涉及到对数据的遍历查询和处理,比如我们需要将dataframe两列数据两两相除,并将结果存储于一个新的列表中.本文通过该例程介绍对pa

  • python中数据库like模糊查询方式

    在Python中%是一个格式化字符,所以如果需要使用%则需要写成%%. 将在Python中执行的sql语句改为: sql = "SELECT * FROM table_test WHERE value LIKE '%%%%%s%%%%'" % test_value 执行成功,print出SQL语句之后为: SELECT * FROM table_test WHERE value LIKE '%%public%%' Python在执行sql语句的时候,同样也会有%格式化的问题,仍然需要使

  • Pandas的数据过滤实现

    作者|Amanda Iglesias Moreno 编译|VK 来源|Towards Datas Science 从数据帧中过滤数据是清理数据时最常见的操作之一.Pandas提供了一系列根据行和列的位置和标签选择数据的方法.此外,Pandas还允许你根据列类型获取数据子集,并使用布尔索引筛选行. 在本文中,我们将介绍从Pandas数据框中选择数据子集的最常见操作: 按标签选择单列 按标签选择多列 按数据类型选择列 按标签选择一行 按标签选择多行 按位置选择一行 按位置选择多行 同时选择行和列 选

  • 解决一个pandas执行模糊查询sql的坑

    查询引擎使用了presto,在sql中使用了模糊查询. engine = create_engine(presto_url,encoding='utf-8') sql_exe ="""select id,title,tags from source.base.table where tags like '%呵呵%' """ df = pd.read_sql_query(sql_exe,engine) 一直报错: unsupported forma

  • 基于jQuery使用Ajax动态执行模糊查询功能

    使用Ajax动态执行模糊查询功能 •必须:需要一个执行查询的接口: 说明: 1.搜索模块仅仅使用了boostrap的样式以及Jquery.js文件 2.因为我使用的layui的弹出层里面做的搜索ifram,所以确定和取消按钮的关闭当前页面的功能都是layui的方式,如果不是ifram的窗口仅仅在当前窗口执行的情况下,可以使用下面的语句来进行关闭当前页面的操作: window.opener=null; window.open('','_self'); window.close(); 效果展示: 引

  • django执行原始查询sql,并返回Dict字典例子

    很多时候执行sql语句,数据比django的model来的快,但并不想关心返回的字段,例如你可以执行:select * from product这种sql,这里个方法将会返回与数据库列名相同的键值对 ,格式是这样子的: result = [{"id":1,"name":"product1"},{"id":2,"name":"product2"}] 当然你还可以 import json j

  • 关于spring data jpa 模糊查询like的坑点

    目录 spring data jpa 模糊查询like坑点 spring data jpa like 查询问题 spring data jpa 模糊查询like坑点 在 ServiceImpl 中 调用, 不要忘记 % factoryinfoDao.findByFactorynameLike("%"+input+"%") spring data jpa like 查询问题 在使用Spring Data Jpa Like时 在继承JpaRepository的一个接口中

  • Mybatis模糊查询和动态sql语句的用法

    Mybatis 模糊查询和动态sql语句 模糊查询 对数据库最常用的操作就是查询了,但是如何使用Mybatis进行模糊查询呢?下面先看一个简单的模糊查询 <select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee WHERE emp_name LIKE #{asd} </select> 这是一条伪模糊查询, 因为没有实现真正的模糊 "%&qu

  • mybatis 模糊查询的实现方法

    mybatis 模糊查询的实现方法 mybatis的逆向助手确实好用,可以省去很多编写常规sql语句的时间,但是它没办法自动生成模糊查询语句,但开发中模糊查询是必不可少的,所以,需要手动对mapper编写模糊查询功能. 这里先明确MyBatis/Ibatis中#和$的区别: 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解

  • 在php7中MongoDB实现模糊查询的方法详解

    前言 在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单: db.collection.find({'_id': /^5101/}) 上面这句就是查询_id以'5101'开始的内容. 在老的MogoDB中模糊查询挺简单的,这里简单记录下模糊查询的操作方式: 命令行下: db.letv_logs.find({"ctime":/uname?/i}); php操作 $query=array("name"=>new Mongo

  • SQL查询语句通配符与ACCESS模糊查询like的解决方法

    ACCESS的通配符和SQL SERVER的通配符比较===================================================ACCESS库的通配符为:*   与任何个数的字符匹配?   与任何单个字母的字符匹配 SQL Server中的通配符为:% 与任何个数的字符匹配_ 与单个字符匹配正文我今天在写个页面的时候,也很郁闷,表中明明有记录,但在ASP里就是搜索不到,理论的sql语句如下:Select * FROM t_food Where t_food.name

  • SQL模糊查询报:ORA-00909:参数个数无效问题的解决

    用oracle数据库进行模糊查询时, 控制台报错如下图所示: 原因是因为敲的太快,语法写错了 正确的写法是 pd.code like concat(concat('%',#{keyword}),'%') java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效 用MyBatis进行多参数模糊查询的时候遇到这个异常,看了下打印日志,发现异常出在预编译之后,插入实参的时候. ==> Preparing: select role_id, role_name

  • SqlServer使用 case when 解决多条件模糊查询问题

    我们在进行项目开发中,经常会遇到多条件模糊查询的需求.对此,我们常见的解决方案有两种:一是在程序端拼接SQL字符串,根据是否选择了某个条件,构造相应的SQL字符串:二是在数据库的存储过程中使用动态的SQL语句.其本质也是拼接SQL字符串,不过是从程序端转移到数据库端而已. 这两种方式的缺点是显而易见的:一是当多个条件每个都可为空时,要使用多个if语句进行判断:二是拼接的SQL语句容易产生SQL注入漏洞. 最近写数据库存储过程的时候经常使用case when 语句,正好可以用这个语句解决一下以上问

随机推荐