我完全同意这是一个非常基本的问题,可能它在某处有答案,但我不知道怎么找不到它.(我也不是很熟悉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)
我怎么能够
在此定义单列索引(例如关于电子邮件)?(Probaby index = True会这样做.如果是这样的话,那么它主要是我失去的下一个点)
如何在此定义多列索引(例如,在电子邮件和ip_addr上.我使用alembic进行迁移,当我定义类似 - Index('user_index',Users.c.email)[注释行]时在类中的列定义之后,它确实给出了一个错误"NameError:name'Users'未定义")
在alembic的env.py中,除了所有普通线和默认线之外,我有这两行
from tutorial.models import Base . . . target_metadata = Base.metadata
我的应用名称是教程.如果以某种方式需要它,我使用Pyramid作为框架.和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)