SQLAlchemy中的列值为“REGEXP”模式?

时间:2018-04-03 10:14:30

标签: python mysql sqlalchemy

是否可以在SQLAlchemy中使用列值作为REGEXP模式?

我有一张桌子:

CREATE TABLE my_table (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
column int(200) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

有两个样本行:

INSERT INTO my_table (id, column)
VALUES
(1, '^S[[:digit:]]{10}$'),
(2, '^M[[:digit:]]{8}$');

在mysql中可以做到:

SELECT id FROM my_table WHERE 'S1803020001' REGEXP my_table.column;
+----+
| id |
+----+
|  1 |
+----+

我正在寻找一种在SQLAlchemy中实现它的方法。

这就是我如何在我的模型中使用文字regexp

MyTable.query.filter(MyTable.column.op('regexp')(r'pattern'))

但是这一次我正在寻找一种方式来交换模式'和' MyTable.column'。

我知道由于各种底层数据库后端可能不支持它,因为并非所有后端都支持非文字regexp模式。尽管如此,我很好奇是否以及如何实现。

1 个答案:

答案 0 :(得分:1)

使用literal()只需撤消操作:

literal('foo').op('regexp')(MyTable.column)