gpt4 book ai didi

python - 使用 Alembic 在 SqlAlchemy 中定义索引

转载 作者:行者123 更新时间:2023-12-01 23:41:15 24 4
gpt4 key购买 nike

我完全同意这是一个非常基本的问题,也许它在某个地方有答案,但我不知何故找不到它。 (而且我对SqlAlchemy也不是很精通)

我有这个代码 -

from sqlalchemy import Column, Integer, Text, String, TIMESTAMP, Boolean, \
UnicodeText
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.schema import Sequence, ForeignKey, Index
from zope.sqlalchemy import ZopeTransactionExtension
import datetime

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()

class Users(Base):
__tablename__ = "user_table"

id = Column(Integer, Sequence('idseq'), primary_key = True)
email = Column(String, unique=True)
ip_addr = Column(String)
created_date = Column(TIMESTAMP(timezone=True), default=datetime.datetime.utcnow)
modified_date = Column(TIMESTAMP(timezone=True), default=datetime.datetime.utcnow)
#Index('user_index',Users.c.email)

我怎样才能

  1. 为此定义一个单列索引(比如在电子邮件上)? (可能index=True 会执行此操作。如果是这样,那么这主要是下一点我迷路的地方)
  2. 如何在此定义多列索引(例如,在电子邮件和 ip_addr 上)。我使用 alembic 进行迁移,当我定义类似 - Index('user_index',Users.c.email) 的内容时[注释行]在类中的列定义之后,它确实给了我一个错误“NameError:名称'Users'未定义”)

在alembic的env.py中,除了所有正常和默认行之外,我还有这两行

from tutorial.models import Base
.
.
.
target_metadata = Base.metadata

我的应用程序名称是tutorial。如果有需要,我会使用金字塔作为框架。和 postgres 作为数据库。

我再次告诉您,这可能是一个非常基本的问题,但我现在无法弄清楚,所以任何帮助都会很棒。

谢谢。

最佳答案

对于我来说,是的,在字段定义中使用 index=True

对于 II,只需将 Index 声明放在类定义之外即可:

class Users(Base):
__tablename__ = "user_table"

id = Column(Integer, Sequence('idseq'), primary_key=True)
email = Column(String, unique=True)
ip_addr = Column(String)
created_date = Column(TIMESTAMP(timezone=True), default=datetime.datetime.utcnow)
modified_date = Column(TIMESTAMP(timezone=True), default=datetime.datetime.utcnow)

Index('user_index', Users.c.email, Users.c.ip_addr)

关于python - 使用 Alembic 在 SqlAlchemy 中定义索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20845835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com