Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于添加索引的SQLAlchemy/Alembic原始SQL_Python_Postgresql_Sqlalchemy_Alembic - Fatal编程技术网

Python 用于添加索引的SQLAlchemy/Alembic原始SQL

Python 用于添加索引的SQLAlchemy/Alembic原始SQL,python,postgresql,sqlalchemy,alembic,Python,Postgresql,Sqlalchemy,Alembic,我想使用以下原始SQL在PostgreSQL中创建索引: CREATE INDEX ix_action_date ON events_map ((action ->> 'action'), date, map_id); 我试图将这一行放入模型类的\uu表\u参数\uu部分,但我做不到。然后,我简单地通过在Alembic迁移中使用原始SQL解决了这个问题 conn = op.get_bind() conn.execute(text("CREATE INDEX ...")) 只需在\

我想使用以下原始SQL在PostgreSQL中创建索引:

CREATE INDEX ix_action_date ON events_map ((action ->> 'action'), date, map_id);
我试图将这一行放入模型类的
\uu表\u参数\uu
部分,但我做不到。然后,我简单地通过在Alembic迁移中使用原始SQL解决了这个问题

conn = op.get_bind()
conn.execute(text("CREATE INDEX ..."))
只需在
\uuuu table\u args\uuuu
中使用一个虚拟索引,如下所示:

Index('ix_action_date')
我唯一的问题是Alembic不接受同名的虚拟索引,每次我运行
修订版--autogenerate
,它都会告诉我以下内容:

SAWarning: Skipped unsupported reflection of expression-based index ix_action_date
  % idx_name)
然后将自动生成的索引添加到迁移文件中:

op.create_index('ix_action_date', 'events_map', [], unique=False)
我的问题是:

  • 如何将原始SQL写入
    \u表\u参数\u
    索引

  • 我如何才能真正使我的虚拟索引概念起作用?我指的是只按名称比较的索引

  • 如何将原始SQL写入
    \u表\u参数\u
    索引

    要指定公式索引,必须为表达式提供文本元素

    例如:

    class EventsMap(Base):
        __tablename__ = 'events_map'
        __table_args__ = (Index('ix_action_date', text("(action->>'action'), date, map_id")),)
        map_id = Column(Integer, primary_key=True)
        date = Column(DateTime)
        action = Column(JSONB)
    
    我如何才能真正使我的虚拟索引概念起作用?我指的是只按名称比较的索引


    似乎没有必要让虚拟索引概念起作用。如我上面所示,在
    \uuuu table\u args\uuuu
    中指定完整的索引表达式,或者将其作为sqlalchemy处理的数据库迁移从模型和委托索引创建中完全省略。

    您是否可以添加更多关于“我试图将这一行放入模型类的
    \uu table\u args\uuu
    部分,但我做不到”的详细信息?这似乎是XY问题。我正在使用SQLAlchemy ORM。每个模型都在一个类中指定。该类上的table_args变量指定表的自定义属性,如索引。我想在表_args中声明我的索引。这更像是编辑您的问题,将您的声明性定义包含在失败的尝试中,以及它是如何失败的。如果您在迁移中使用原始SQL手动创建索引,您甚至不必在表args中使用
    索引
    ,更不用说“伪”索引了。您是对的,如果我从表args中删除索引,它似乎可以工作,我只需要接受:
    跳过了对每个
    --autogenerate
    的基于表达式的索引的不受支持的反射。关于第一条注释,SQLA支持索引中的表达式,至少对Postgresql方言是这样,因此为json(b)创建了一个
    索引定义列表达式和其他表达式应该是可行的。