sqalchemy의 선언적 ORM 확장자를 사용하는 경우 다중 열 인덱스
문서와 의 의견에 따르면sqlalchemy.Column수업, 우리는 수업을 이용해야 합니다.sqlalchemy.schema.Index여러 열을 포함하는 인덱스를 지정합니다.
그러나 예제에서는 다음과 같이 Table 개체를 직접 사용하여 수행하는 방법을 보여 줍니다.
meta = MetaData()
mytable = Table('mytable', meta,
# an indexed column, with index "ix_mytable_col1"
Column('col1', Integer, index=True),
# a uniquely indexed column with index "ix_mytable_col2"
Column('col2', Integer, index=True, unique=True),
Column('col3', Integer),
Column('col4', Integer),
Column('col5', Integer),
Column('col6', Integer),
)
# place an index on col3, col4
Index('idx_col34', mytable.c.col3, mytable.c.col4)
선언적 ORM 확장자를 사용하면 어떻게 해야 합니까?
class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, , primary_key=True)
a = Column(String(32))
b = Column(String(32))
저는 "a"열과 "b"열에 대한 색인을 원합니다.
저것들은 그냥Columnobjects, index=True 플래그는 정상적으로 작동합니다.
class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, primary_key=True)
a = Column(String(32), index=True)
b = Column(String(32), index=True)
합성 지수를 원한다면, 다시.Table당신은 여기에 평소와 같이 존재합니다. 당신은 단지 그것을 선언할 필요가 없습니다. 모든 것이 똑같이 작동합니다(당신이 선언 A에 대해 최근 0.6 또는 0.7에 있는지 확인하십시오. 포장지는 해석됩니다.Column클래스 선언이 완료된 후):
class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, primary_key=True)
a = Column(String(32))
b = Column(String(32))
Index('my_index', A.a, A.b)
0.7 안에Index에 있을 수 있습니다Table논쟁 또한, 그것은 선언과 함께 다음과 같습니다.__table_args__:
class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, primary_key=True)
a = Column(String(32))
b = Column(String(32))
__table_args__ = (Index('my_index', "a", "b"), )
@zzeek의 답을 완성하기 위해서 입니다.
DESC로 합성 인덱스를 추가하고 ORM 선언 방법을 사용하는 경우 다음과 같이 수행할 수 있습니다.
또한 SQLAlchemy의 Functional Index 문서를 작성하는 데 어려움을 겪으며 대체 방법을 찾고 있었습니다.mytable.c.somecol.
from sqlalchemy import Index Index('someindex', mytable.c.somecol.desc())
우리는 단지 모델 부동산을 사용하고 전화하면 됩니다..desc()그 위에:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class GpsReport(db.Model):
__tablename__ = 'gps_report'
id = db.Column(db.Integer, db.Sequence('gps_report_id_seq'), nullable=False, autoincrement=True, server_default=db.text("nextval('gps_report_id_seq'::regclass)"))
timestamp = db.Column(db.DateTime, nullable=False, primary_key=True)
device_id = db.Column(db.Integer, db.ForeignKey('device.id'), primary_key=True, autoincrement=False)
device = db.relationship("Device", back_populates="gps_reports")
# Indexes
__table_args__ = (
db.Index('gps_report_timestamp_device_id_idx', timestamp.desc(), device_id),
)
Alembic을 사용하면 Flask-Migrate를 사용합니다. 다음과 같은 것이 발생합니다.
from alembic import op
import sqlalchemy as sa
# Added manually this import
from sqlalchemy.schema import Sequence, CreateSequence
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
# Manually added the Sequence creation
op.execute(CreateSequence(Sequence('gps_report_id_seq')))
op.create_table('gps_report',
sa.Column('id', sa.Integer(), server_default=sa.text("nextval('gps_report_id_seq'::regclass)"), nullable=False),
sa.Column('timestamp', sa.DateTime(), nullable=False))
sa.Column('device_id', sa.Integer(), autoincrement=False, nullable=False),
op.create_index('gps_report_timestamp_device_id_idx', 'gps_report', [sa.text('timestamp DESC'), 'device_id'], unique=False)
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index('gps_report_timestamp_device_id_idx', table_name='gps_report')
op.drop_table('gps_report')
# Manually added the Sequence removal
op.execute(sa.schema.DropSequence(sa.Sequence('gps_report_id_seq')))
# ### end Alembic commands ###
마지막으로 Postgre에 다음 표와 인덱스가 있어야 합니다.SQL 데이터베이스:
psql> \d gps_report;
Table "public.gps_report"
Column | Type | Collation | Nullable | Default
-----------------+-----------------------------+-----------+----------+----------------------------------------
id | integer | | not null | nextval('gps_report_id_seq'::regclass)
timestamp | timestamp without time zone | | not null |
device_id | integer | | not null |
Indexes:
"gps_report_pkey" PRIMARY KEY, btree ("timestamp", device_id)
"gps_report_timestamp_device_id_idx" btree ("timestamp" DESC, device_id)
Foreign-key constraints:
"gps_report_device_id_fkey" FOREIGN KEY (device_id) REFERENCES device(id)
언급URL : https://stackoverflow.com/questions/6626810/multiple-columns-index-when-using-the-declarative-orm-extension-of-sqlalchemy
'programing' 카테고리의 다른 글
| mariadb : ODBCConf.exe로 ODBC 구성 (0) | 2023.10.03 |
|---|---|
| 에서 DbContext Connection String을 구현하려면 어떻게 해야 합니까?NET Core? (0) | 2023.10.03 |
| 워드프레스:여러 언어를 선택할 경우 method="post" 사용 (0) | 2023.10.03 |
| 워드프레스 멀티사이트에서 사용자가 자신의 플러그인을 설치할 수 있도록 하려면 어떻게 해야 합니까? (0) | 2023.09.28 |
| AD 계정이 잠겨 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.09.28 |