簡體   English   中英

使用sqlalchemy和postgres的可搜索列

[英]searchable columns with sqlalchemy and postgres

我是數據庫的初學者,我不確定是否正確理解它們。

據我所知,給定一個包含多列的表,我可以進行如下查詢: SELECT * FROM table WHERE col1>3

該查詢的復雜度為N 為了使搜索更加有效,我可以使用col1作為索引。 在這種情況下,同一查詢應具有復雜度log(N)

現在,據我了解,可以在sqlalchemy中將一列設置為主鍵來進行搜索。

如果這是正確的,我不明白為什么我不能將具有重復項的列設置為主鍵。

例如:

import sqlite3                                                                                                                                                                                              
from sqlalchemy import *                                                                                                                                                                                    


metadata = MetaData()                                                                                                                                                                                       
table = Table('example', metadata,                                                                                                                                                                          
              Column('col1', Integer, primary_key=True),                                                                                                                                                    
              Column('col2', Integer))                                                                                                                                                                      

engine = create_engine('sqlite:///:memory:', echo=True)                                                                                                                                                     
con = engine.connect()                                                                                                                                                                                      

table.create(engine, checkfirst=True)                                                                                                                                                                       


data = [{'col1':1, 'col2':2}, {'col1':3, 'col2':4},  {'col1':3, 'col2':4}]                                                                                                                                  
ins = table.insert().values(data)                                                                                                                                                                           
con.execute(ins)                                                                                                                                                                                            


print list(con.execute("SELECT * FROM example"))                                                                                                                                                            



          returns

IntegrityError: (sqlite3.IntegrityError) PRIMARY KEY must be unique [SQL: u'INSERT INTO example (col1, col2) VALUES (?, ?), (?, ?), (?, ?)'] [parameters: (1, 2, 3, 4, 3, 4)]

如何使非唯一列在log(N)中可搜索?

編輯:該示例是使用sqlite編寫的,但實際上我正在使用postgres。

現在,據我了解,可以在sqlalchemy中將一列設置為主鍵來進行搜索。

主鍵列會自動建立索引,但是您經常需要索引非唯一列。 您可以使用index關鍵字參數來做到這一點:

table = Table('example', metadata,
    Column('col1', Integer, index=True),
    Column('col2', Integer)
)

您可以在日志文件中看到相應的SQL:

INFO sqlalchemy.engine.base.Engine CREATE INDEX ix_example_col1 ON example (col1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM