本文的目的是介绍使用SQLAlchemy的PostgreSQLILIKE查询的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于postgresql–PythonSQLAlc
本文的目的是介绍使用SQLAlchemy的PostgreSQL ILIKE查询的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于postgresql – Python SQLAlchemy:映射PostGIS geom字段、postgresql – sqlalchemy中的点类型?、postgresql – SQLAlchemy声明式:定义触发器和索引(Postgres 9)、postgresql – SQLAlchemy复合类型的知识。
本文目录一览:- 使用SQLAlchemy的PostgreSQL ILIKE查询
- postgresql – Python SQLAlchemy:映射PostGIS geom字段
- postgresql – sqlalchemy中的点类型?
- postgresql – SQLAlchemy声明式:定义触发器和索引(Postgres 9)
- postgresql – SQLAlchemy复合类型
使用SQLAlchemy的PostgreSQL ILIKE查询
我想运行一个查询,以选择标题匹配的所有不区分大小写的帖子''%'' + [some_phrase] + ''%''
。也就是说,选择标题 包含
某些短语(不区分大小写)的所有行。从我完成的研究来看,我似乎需要使用Postgres的ILIKE查询来匹配不区分大小写的代码。如何使用SQLAlchemy执行类似的查询?
class Post(db.Model): id = db.Column(db.Integer, primary_key = True) title = db.Column(db.String(250)) content = db.Column(db.String(5000))
答案1
小编典典我认为应该可以
Post.query.filter(Post.title.ilike(''%some_phrase%''))
http://docs.sqlalchemy.org/en/latest/orm/internals.html?highlight=ilike#sqlalchemy.orm.attributes.QueryableAttribute.ilike
postgresql – Python SQLAlchemy:映射PostGIS geom字段
class User(Base): __tablename__ = ''users'' id = Column(Integer,Sequence(''user_id_seq''),primary_key=True) name = Column(String(50)) fullname = Column(String(50)) password = Column(String(12))
应该使用哪种类型将PostGIS geom column映射到班级成员?
解决方法
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String,Sequence from geoalchemy2 import Geometry Base = declarative_base() class User(Base): __tablename__ = ''users'' id = Column(Integer,primary_key=True) name = Column(String(50)) fullname = Column(String(50)) password = Column(String(12)) geom = Column(Geometry(''POINT''))
GeoAlchemy2还提供空间查询功能.从docs开始:
query = session.query(Lake).filter(Lake.geom.ST_Contains(''POINT(4 1)''))
postgresql – sqlalchemy中的点类型?
是否有sqlAlchemy版本?
我以这种方式存储值:(40.721959482,-73.878993913)
解决方法
from sqlalchemy import Column from geoalchemy2 import Geometry # and import others class Shop(db.Model): # other fields coordinates = Column(Geometry(''POINT''))
postgresql – SQLAlchemy声明式:定义触发器和索引(Postgres 9)
例如,如果我有一个基本的表,如…
class Customer(DeclarativeBase): __tablename__ = 'customers' customer_id = Column(Integer,primary_key=True,autoincrement=True) customer_code = Column(Unicode(15),unique=True) customer_name = Column(Unicode(100)) search_vector = Column(tsvector) ## *Not sure how do this yet either in sqlalchemy*.
我现在想创建一个触发器来更新“search_vector”
CREATE TRIGGER customers_search_vector_update BEFORE INSERT OR UPDATE ON customers FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(search_vector,'pg_catalog.english',customer_code,customer_name);
然后我想添加该字段也作为索引…
create index customers_search_vector_indx ON customers USING gin(search_vector);
现在,在我从应用程序中进行任何类型的数据库重新生成后,我必须对tsvector列,触发器定义和psql中的索引语句添加列。不是世界的尽头,而是容易忘记一步。我所有关于自动化,所以如果我可以让这一切发生在应用程序设置,然后奖金!
customer_code = Column(Unicode(15),unique=True,index=True)
但是,如果您想要更好地控制名称和选项,请使用显式的Index()构造:
Index('customers_search_vector_indx',Customer.__table__.c.search_vector,postgresql_using='gin')
也可以创建触发器,但这些触发器仍然需要基于sql并挂接到DDL事件。请参阅Customizing DDL了解更多信息,但代码可能与此类似:
from sqlalchemy import event,DDL trig_ddl = DDL(""" CREATE TRIGGER customers_search_vector_update BEFORE INSERT OR UPDATE ON customers FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(search_vector,customer_name); """) tbl = Customer.__table__ event.listen(tbl,'after_create',trig_ddl.execute_if(dialect='postgresql'))
Sidenote:我不知道如何配置tsvector数据类型:值得一个单独的问题。
postgresql – SQLAlchemy复合类型
我想创建一个单独的类型,例如具有值和货币的金额,然后能够重复引用它,并且可能多次从同一个类引用它:
class Transfer(base): __tablename__ = "transfer" source_amount = Column(Amount) target_amount = Column(Amount)
我见过的所有例子(例如this one)都要求我指定列的名称,这使得上述方法不可能(列名称会发生冲突).
此外,我宁愿每个Amount有一列而不是两个(因为没有货币,价值实际上没有多大意义,我宁愿数据库负责永远不要分离或混合它们).似乎Postgres可以做到这一点,我只需要一种方法向sqlAlchemy解释我需要什么.我试过阅读http://docs.sqlalchemy.org/en/latest/core/custom_types.html,但它似乎专注于扩充现有的类型,而不是创建新的复合材料(我不知道在impl下放什么).
也许我应该放弃sqlAlchemy并直接与psycopg2沟通?它有一个psycopg2.extras.register_composite函数,但是一旦我这样做,我仍然不知道如何说服sqlAlchemy识别注册.我可能不得不以某种方式将光标从psycopg2传递给sqlAlchemy,但我不知道该怎么做.
解决方法
但是,sqlalchemy_utils本机支持postgresql复合类型.
以下是他们的文档中的示例:
from collections import OrderedDict import sqlalchemy as sa from sqlalchemy_utils import CompositeType,CurrencyType class Account(Base): __tablename__ = ''account'' id = sa.Column(sa.Integer,primary_key=True) balance = sa.Column( CompositeType( ''money_type'',[ sa.Column(''currency'',CurrencyType),sa.Column(''amount'',sa.Integer) ] ) )
用法:
session.query(Account).filter(Account.balance.amount > 5000)
今天的关于使用SQLAlchemy的PostgreSQL ILIKE查询的分享已经结束,谢谢您的关注,如果想了解更多关于postgresql – Python SQLAlchemy:映射PostGIS geom字段、postgresql – sqlalchemy中的点类型?、postgresql – SQLAlchemy声明式:定义触发器和索引(Postgres 9)、postgresql – SQLAlchemy复合类型的相关知识,请在本站进行查询。
本文标签: