@ Zzzeek'in cevabını tamamlamak için .
DESC ile bileşik bir dizin eklemek ve ORM bildirim yöntemini kullanmak isterseniz, aşağıdaki işlemleri yapabilirsiniz.
Dahası, SQSAlchemy'nin Fonksiyonel Dizinler dokümantasyonuyla mücadele ediyor, nasıl değiştirileceğini bulmaya çalışıyordum mytable.c.somecol.
from sqlalchemy import Index
Index('someindex', mytable.c.somecol.desc())
Sadece model özelliğini kullanabilir ve çağırabiliriz .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")
__table_args__ = (
db.Index('gps_report_timestamp_device_id_idx', timestamp.desc(), device_id),
)
Alembic kullanıyorsanız, Flask-Migrate kullanıyorum, aşağıdaki gibi bir şey oluşturur:
from alembic import op
import sqlalchemy as sa
from sqlalchemy.schema import Sequence, CreateSequence
def upgrade():
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():
op.drop_index('gps_report_timestamp_device_id_idx', table_name='gps_report')
op.drop_table('gps_report')
op.execute(sa.schema.DropSequence(sa.Sequence('gps_report_id_seq')))
Son olarak, PostgreSQL veritabanınızda aşağıdaki tablo ve dizinlere sahip olmalısınız:
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)