From 16e29429348d3f54a9b4820181b9d2361d48b90f Mon Sep 17 00:00:00 2001 From: crflynn Date: Mon, 14 May 2018 22:32:59 -0400 Subject: [PATCH] add indexes to downloads tables --- .../versions/a91799876ec2_add_indexes.py | 37 +++++++++++++++++++ pypistats/models/download.py | 20 +++++++--- scripts/run_migrate.sh | 6 +++ 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 migrations/versions/a91799876ec2_add_indexes.py create mode 100644 scripts/run_migrate.sh diff --git a/migrations/versions/a91799876ec2_add_indexes.py b/migrations/versions/a91799876ec2_add_indexes.py new file mode 100644 index 0000000..6972b0a --- /dev/null +++ b/migrations/versions/a91799876ec2_add_indexes.py @@ -0,0 +1,37 @@ +"""add indexes + +Revision ID: a91799876ec2 +Revises: e65ba8f3cdcf +Create Date: 2018-05-14 22:27:11.123192 + +""" +# flake8: noqa +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a91799876ec2' +down_revision = 'e65ba8f3cdcf' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_index(op.f('ix_overall_package'), 'overall', ['package'], unique=False) + op.create_index(op.f('ix_python_major_package'), 'python_major', ['package'], unique=False) + op.create_index(op.f('ix_python_minor_package'), 'python_minor', ['package'], unique=False) + op.create_index(op.f('ix_recent_package'), 'recent', ['package'], unique=False) + op.create_index(op.f('ix_system_package'), 'system', ['package'], unique=False) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_index(op.f('ix_system_package'), table_name='system') + op.drop_index(op.f('ix_recent_package'), table_name='recent') + op.drop_index(op.f('ix_python_minor_package'), table_name='python_minor') + op.drop_index(op.f('ix_python_major_package'), table_name='python_major') + op.drop_index(op.f('ix_overall_package'), table_name='overall') + # ### end Alembic commands ### diff --git a/pypistats/models/download.py b/pypistats/models/download.py index 46c9934..1d64712 100644 --- a/pypistats/models/download.py +++ b/pypistats/models/download.py @@ -10,7 +10,9 @@ class OverallDownloadCount(Model): __tablename__ = "overall" date = Column(db.Date, primary_key=True, nullable=False) - package = Column(db.String(128), primary_key=True, nullable=False) + package = Column( + db.String(128), primary_key=True, nullable=False, index=True + ) # with_mirrors or without_mirrors category = Column(db.String(16), primary_key=True, nullable=False) downloads = Column(db.Integer(), nullable=False) @@ -27,7 +29,9 @@ class PythonMajorDownloadCount(Model): __tablename__ = "python_major" date = Column(db.Date, primary_key=True, nullable=False) - package = Column(db.String(128), primary_key=True, nullable=False) + package = Column( + db.String(128), primary_key=True, nullable=False, index=True + ) # python_major version, 2 or 3 (or null) category = Column(db.String(4), primary_key=True, nullable=True) downloads = Column(db.Integer(), nullable=False) @@ -44,7 +48,9 @@ class PythonMinorDownloadCount(Model): __tablename__ = "python_minor" date = Column(db.Date, primary_key=True) - package = Column(db.String(128), primary_key=True, nullable=False) + package = Column( + db.String(128), primary_key=True, nullable=False, index=True + ) # python_minor version, e.g. 2.7 or 3.6 (or null) category = Column(db.String(4), primary_key=True, nullable=True) downloads = Column(db.Integer(), nullable=False) @@ -63,7 +69,9 @@ class RecentDownloadCount(Model): __tablename__ = "recent" - package = Column(db.String(128), primary_key=True, nullable=False) + package = Column( + db.String(128), primary_key=True, nullable=False, index=True + ) # recency, e.g. day, week, month category = Column(db.String(8), primary_key=True, nullable=False) downloads = Column(db.BigInteger(), nullable=False) @@ -80,7 +88,9 @@ class SystemDownloadCount(Model): __tablename__ = "system" date = Column(db.Date, primary_key=True) - package = Column(db.String(128), primary_key=True, nullable=False) + package = Column( + db.String(128), primary_key=True, nullable=False, index=True + ) # system, e.g. Windows or Linux or Darwin (or null) category = Column(db.String(8), primary_key=True, nullable=True) downloads = Column(db.Integer(), nullable=False) diff --git a/scripts/run_migrate.sh b/scripts/run_migrate.sh new file mode 100644 index 0000000..74be735 --- /dev/null +++ b/scripts/run_migrate.sh @@ -0,0 +1,6 @@ +export ENV=prod +set -o allexport +source pypistats/secret/$ENV.env +set +o allexport +# flask db revision --message "message" --autogenerate +# flask db upgrade