Đây là SQL Tôi muốn tạo:Làm thế nào để tạo ra một chỉ số chức năng chữ thường duy nhất bằng cách sử dụng SQLAlchemy trên PostgreSQL?
CREATE UNIQUE INDEX users_lower_email_key ON users (LOWER(email));
Từ SQLAlchemy Index documentation tôi sẽ mong đợi điều này để làm việc:
Index('users_lower_email_key', func.lower(users.c.email), unique=True)
Nhưng sau khi tôi gọi metadata.create(engine)
bảng được tạo ra nhưng chỉ số này không phải là . Tôi đã từ conf import dsn, DEBUG
engine = create_engine(dsn.engine_info())
metadata = MetaData()
metadata.bind = engine
users = Table('users', metadata,
Column('user_id', Integer, primary_key=True),
Column('email', String),
Column('first_name', String, nullable=False),
Column('last_name', String, nullable=False),
)
Index('users_lower_email_key', func.lower(users.c.email), unique=True)
metadata.create_all(engine)
Xem định nghĩa bảng trong PostgreSQL Tôi thấy rằng chỉ mục này không được tạo.
\d users
Table "public.users"
Column | Type | Modifiers
------------+-------------------+---------------------------------------------------------
user_id | integer | not null default nextval('users_user_id_seq'::regclass)
email | character varying |
first_name | character varying | not null
last_name | character varying | not null
Indexes:
"users_pkey" PRIMARY KEY, btree (user_id)
Làm cách nào để tạo chỉ mục thấp hơn, duy nhất của tôi?
Tôi cũng tò mò về vấn đề này. –
Tại sao bạn cố gắng lấy chữ thường của cột 'INTEGER'. – SingleNegationElimination
@TokenMacGuy Tôi đã sắp hỏi cùng một điều bởi vì điều đó không làm việc và Postgres với ném một lỗi. Tuy nhiên, nếu bạn sử dụng kiểu 'String', thì ví dụ này hoạt động hoàn hảo và không gặp rắc rối. – javex