我有2个表格users
和users_address
,我试图让所有用户的姓名或地址都不完整。
除了与邮政路由相关的过滤器之外,一切都运行良好,我搜索的模式为:
(某些数字)+(空格)+(某些字母或空格)
这是我的代码:
ua = aliased(UserAddress)
# Main query, incomplete users or addresses
query1 = DBSession.query(
User.id,
User.member_id,
User.lastname,
User.firstname,
ua.supplemental_address_1,
ua.supplemental_address_2,
ua.supplemental_address_3,
ua.street_address,
ua.postal_routing,
ua.country,
).distinct()
query1 = query1.join(ua, User.addresses)
query1 = query1.filter(
sa.or_(
User.lastname == u'',
User.firstname == u'',
sa.and_(
ua.primary == True,
sa.or_(
ua.country == u'',
sa.and_(
ua.supplemental_address_1 == u'',
ua.supplemental_address_2 == u'',
ua.supplemental_address_3 == u'',
ua.street_address == u'',
),
~ua.postal_routing.op('regexp')('\d*\ ?(\w\s)*'),
)
)
)
)
但我收到了这个错误:
ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near "regexp"
LINE 4: ...ress = '' OR NOT (user_addresses_1.postal_routing regexp '[[...
我认为在调用正则表达式方面犯了一个错误,我很确定我的正则表达式本身是错误的形式:(
有人可以帮助我吗?
答案 0 :(得分:1)
好的,自我回答。
我在Using regex in WHERE in Postgres中看到的,
Postgresql中正确的REGEX调用是~
所以,正确的语法是:
-
~ua.postal_routing.op('regexp')('\d*\ ?(\w\s)*'),
+
~ua.postal_routing.op('~')('^\d+ \w+$'),
顺便说一句,我改变了模式。
也许有更好的语法,但这个对我有用。