小编hon*_*ane的帖子

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

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

我自己和我项目中的其他人都在寻找这个,但我们似乎无法找到任何符合我们需求的东西.

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

 SELECT * FROM TABLENAME WHERE UPPER(FIELDNAME) IN (UPPER('foo'), UPPER('bar'));
Run Code Online (Sandbox Code Playgroud)

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

  1. 安全性:我不希望以SQL注入攻击的形式访问Bobby Tables(http://xkcd.com/327/).我无法找到告诉我如何在SQLAlchemy或I中转义字符串的文档会觉得加入琴弦更安全(但仍然觉得这样做很脏).
  2. 速度主要通过索引处理,但很明显,在发出查询之前在RAM中进行大小写修正比告诉DB更快,所以我不会在查询中执行UPPER,除非我真的不得不这样做.然而,上面是展示我想做的最佳方式.但是,它不应该做任何疯狂的事情.
  3. 平台不可知代码.我将在多种数据库类型上运行它 - 它将进行全面测试,我对此事有任何发言权 - 我不希望将查询绑定到SQL的特定对话框.毕竟,为什么我使用SQLAlchemy.:)

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

python mysql sql sqlalchemy pyramid

5
推荐指数
1
解决办法
2776
查看次数

SQLAlchemy:知道模型对象的字段名称和值吗?

我正在努力保持面向对象的 SOLID 编程原则,保持 DRY 等,但我对 Python/SQLAlchemy/Pyramid 的陌生使它变得非常困难。

我正在尝试采用我现在知道的用于创建简单 Pyramid Framework 对象的 SQLAlchemy 模型,并使用我所知道的 C# 中的“反射”,它可能在 Python 中被称为不同的东西(内省?不确定,因为这只是我使用 python 的第二周,但我在其他语言(C/C++/C#、Java 等)方面有很多经验,所以麻烦似乎是将我的知识映射到 python 的词汇表,抱歉),以找出数据库表的字段名,最重要的是当前字段值,当我事先不知道列名或任何形状的对象时。

这是正确的; 我不知道 'derp' 实例有一个名为 id 或 name 的字段,只是它在每个字段中都有一个列和一个值。这就是我所关心的。

目标是能够采用任何 SQLAlchemy 定义的数据模型,并将其转换为 column_name -> column_value 字段的字典,这些字段的类型为 JSON 中的简单数据类型,因为我想最终将我在 SQLAlchemy 中创建的任何对象序列化为json 对象,但我会选择一个字典,因为只要字典包含正确类型的数据,它就很简单。手动为每个对象执行此操作违反了太多良好的干净代码规则,并且随着时间的推移会产生过多的工作;我可以再花一个星期的时间来做这件事,并且仍然可以通过正确的方式来节省时间和精力。

因此,如果我在 SQLAlchemy 中定义了一个类:

class SimpleFooModel(Base):
    id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
    name = Column(VARCHAR(length=12), nullable=False, index=True)
Run Code Online (Sandbox Code Playgroud)

..我有一个等于(在python中)的实例:

derp = SimpleFooModel(id=7, name="Foobar")
Run Code Online (Sandbox Code Playgroud)

我希望能够只拥有上面描述的“derp”实例变量,而对模型的形状一无所知,并且能够将其展平为该简单对象的 python 键-> 值字典,其中每个可以使用 python syslib 中的 import json 将该字典中的值序列化为 JSON。

问题是,我已经看了 2 天了,但找不到可以在任何地方为我的单元测试提供想要的结果的答案;谷歌一直把我带到 SO 上关于真正旧版本的库的非常旧的帖子,这些版本要么使用不再适用的接口,要么接受了实际上根本不起作用的答案;并且因为它们都不是最近的,这确实让我感到惊讶(但是为什么 Stack …

python json sqlalchemy solid-principles pyramid

4
推荐指数
1
解决办法
2035
查看次数

标签 统计

pyramid ×2

python ×2

sqlalchemy ×2

json ×1

mysql ×1

solid-principles ×1

sql ×1