SQLAlchemy不区分大小写的基于IN的搜索查询?

诚实的

如何以安全的方式在SQLAclhemy ORM中进行不区分大小写的IN搜索?

我本人和项目中的其他人都在寻找这一点,但是我们似乎找不到任何符合我们需求的东西。

在原始SQL中,我可以这样做:

 SELECT * FROM TABLENAME WHERE UPPER(FIELDNAME) IN (UPPER('foo'), UPPER('bar'));

..如果在未知情况下FOO和BAR不是用户输入。实际上,我担心以下问题:

  1. 安全性:我不想以SQL注入攻击的形式从Bobby Tables(http://xkcd.com/327/)进行访问。我找不到能告诉我如何在SQLAlchemy中转义字符串的文档。会感觉更安全的连接字符串(但是这样做仍然很脏)。
  2. 速度主要由索引处理,但是很明显,在发出查询之前在RAM中进行大小写校正比告诉DB这样做要快,因此除非确实需要,否则我不会在查询中进行UPPER。上面是显示我想做的最好的方法。但是sti ;;不应做任何疯狂的事情。
  3. 平台无关代码。我将在多种数据库类型上运行它-对此我有任何发言权,它将进行全面测试-而且我不希望查询绑定到特定的SQL对话框。毕竟,这就是为什么我使用SQLAlchemy。:)

如果有帮助,由于使用其他库,我们目前已绑定到8.4版本的SQLAlchemy。

乔纳森·瓦纳斯科

这应该完全编译...

query( models.Object )\
.filter( 
     sqlalchemy.func.upper( models.Object.fieldname )\
     .in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
)\
.all()

  1. 您也可以只传递大写文本。就个人而言,我会in_( foo.uppercase() , bar.uppercase() )

  2. SqlAlchemy与DBAPI一起将绑定参数传递到您的后端数据存储中。转换-值会自动转义。


如果您要列出一个字符串列表,则应该可以执行以下操作

.in_( [ i.upper() for i in inputs ] )
.in_( [ sqlalchemy.func.upper(i) for i in inputs ] )

只需添加一下,如果您想优化这些选择以提高速度,并且使用的是Postgres或Oracle,则可以创建一个“函数索引”

CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))

查询计划者(在数据库中)将lower(fieldname)针对lower(fieldname)查询进行查询使用该索引

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不区分大小写的git pickaxe搜索

来自分类Dev

使用JavaScript从Parse搜索不区分大小写的数据

来自分类Dev

MySQL搜索不区分大小写

来自分类Dev

Rails中不区分大小写的搜索

来自分类Dev

使SQLAlchemy查询不区分大小写

来自分类Dev

如何在Android中解析查询搜索不区分大小写?

来自分类Dev

System.IO.FileInfo不区分大小写的搜索

来自分类Dev

Mongo $ in不区分大小写的查询

来自分类Dev

PostgreSQL重音+不区分大小写的搜索

来自分类Dev

ElasticSearch _suggest查询区分大小写。希望他们不区分大小写

来自分类Dev

区分大小写(不区分大小写)替换搜索结果的str_ireplace

来自分类Dev

PHP-不区分大小写的文件搜索

来自分类Dev

不区分大小写的标签搜索

来自分类Dev

如何使过滤器搜索不区分大小写?

来自分类Dev

React Native的领域-不区分大小写的搜索

来自分类Dev

弹性搜索不区分大小写

来自分类Dev

如何使Wagtail搜索不区分大小写

来自分类Dev

编写在EF Core中不区分大小写的搜索查询?

来自分类Dev

AEM 6.3查询构建器-如何搜索不区分大小写?

来自分类Dev

如何对sqlalchemy association_proxy属性进行不区分大小写的查询?

来自分类Dev

不区分大小写的搜索

来自分类Dev

如何解析查询搜索不区分大小写在Android?

来自分类Dev

ElasticSearch _suggest查询区分大小写。希望他们不区分大小写

来自分类Dev

不区分大小写的标签搜索

来自分类Dev

如何在不区分大小写的Rails中进行查询搜索?

来自分类Dev

不区分大小写的目录搜索?

来自分类Dev

Solr不区分大小写的查询

来自分类Dev

journalctl 搜索不区分大小写

来自分类Dev

如何在弹性搜索中查询不区分大小写的字符串

Related 相关文章

热门标签

归档