我建立了一个Pandas数据库:
import numpy as np
import sqlite3
import pandas as pd
import sqlite3
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
df = pd.DataFrame(np.random.normal(0, 1, (10, 2)), columns=['A', 'B'])
path = 'sqlite:////home/username/Desktop/example.db'
engine = create_engine(path, echo=False)
df.to_sql('flows', engine, if_exists='append', index=False)
# This is only to show I am able to read the database
df_l = pd.read_sql("SELECT * FROM flows WHERE A>0 AND B<0", engine)
现在我想给数据库添加一个或多个索引,在这种情况下,我想首先只为列A
创建索引,然后为两个列创建索引。
我该怎么做呢?
如果可能的话,我想一个解决方案,只使用SqlAlchemy,使它独立于数据库的选择。
2条答案
按热度按时间jchrr9hc1#
你应该使用反射来获得Pandas为你创建的table。
关于:
SQLAlchemy Reflecting Database Objects
可以指示表对象从数据库中已存在的相应数据库方案对象加载有关其自身的信息。此过程称为反射。在最简单的情况下,只需指定表名、MetaData对象和autoload=True标志。如果MetaData不是永久绑定的,则还要添加autoload_with参数:
你可以试试这个
rqenqsqc2#
这似乎对我有用,你必须自己定义变量
psql_URI
、table
和col
,这里我假设表名/列名可能是(部分)大写的,但你希望索引名是小写的。从这里的答案推导出来:https://stackoverflow.com/a/72976667/3406189