fix(alembic 0007): 改用 sa.Column 内嵌 ForeignKey 形式,避免列数不匹配
之前用独立 sa.ForeignKeyConstraint 报 ArgumentError, 改用 sa.Column(..., sa.ForeignKey(...), ...) 形式( 跟 model 里的 mapped_column 形式对齐)。
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
"""文章已读记录(per-user)
|
"""文章已读记录(per-user)
|
||||||
|
|
||||||
- article_reads.user_id BIGINT FK users.id ON DELETE CASCADE
|
- article_reads.user_id INTEGER FK users.id ON DELETE CASCADE
|
||||||
- article_reads.article_id BIGINT FK articles.id ON DELETE CASCADE
|
- article_reads.article_id BIGINT FK articles.id ON DELETE CASCADE
|
||||||
- article_reads.read_at TIMESTAMPTZ DEFAULT now()
|
- article_reads.read_at TIMESTAMPTZ DEFAULT now()
|
||||||
- 复合主键 (user_id, article_id) — 天然幂等
|
- 复合主键 (user_id, article_id) — 天然幂等
|
||||||
|
|
||||||
Revision ID: 0007
|
Revision ID: 0007
|
||||||
@@ -25,16 +25,25 @@ depends_on = None
|
|||||||
def upgrade() -> None:
|
def upgrade() -> None:
|
||||||
op.create_table(
|
op.create_table(
|
||||||
"article_reads",
|
"article_reads",
|
||||||
sa.Column("user_id", sa.Integer, nullable=False), # users.id 是 Integer
|
sa.Column(
|
||||||
sa.Column("article_id", sa.BigInteger, nullable=False), # articles.id 是 BigInteger
|
"user_id",
|
||||||
sa.Column("read_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.text("now()")),
|
sa.Integer,
|
||||||
|
sa.ForeignKey("users.id", ondelete="CASCADE"),
|
||||||
|
nullable=False,
|
||||||
|
),
|
||||||
|
sa.Column(
|
||||||
|
"article_id",
|
||||||
|
sa.BigInteger,
|
||||||
|
sa.ForeignKey("articles.id", ondelete="CASCADE"),
|
||||||
|
nullable=False,
|
||||||
|
),
|
||||||
|
sa.Column(
|
||||||
|
"read_at",
|
||||||
|
sa.DateTime(timezone=True),
|
||||||
|
nullable=False,
|
||||||
|
server_default=sa.text("now()"),
|
||||||
|
),
|
||||||
sa.PrimaryKeyConstraint("user_id", "article_id", name="pk_article_reads"),
|
sa.PrimaryKeyConstraint("user_id", "article_id", name="pk_article_reads"),
|
||||||
sa.ForeignKeyConstraint(
|
|
||||||
"user_id", ["users.id"], ondelete="CASCADE",
|
|
||||||
),
|
|
||||||
sa.ForeignKeyConstraint(
|
|
||||||
"article_id", ["articles.id"], ondelete="CASCADE",
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
op.create_index(
|
op.create_index(
|
||||||
"ix_article_reads_user_read_at",
|
"ix_article_reads_user_read_at",
|
||||||
|
|||||||
Reference in New Issue
Block a user