我已经用这样的类编写了代码:
import sqlalchemy
import pandas as pd
from functools import partial
class dataBase:
def __init__(self, connection_string):
self.engine = sqlalchemy.create_engine(connection_string)
self.read_sql = partial(pd.read_sql, con = self.engine)
self.read_sql_table = partial(pd.read_sql_table, con = self.engine)
self.read_sql_query = partial(pd.read_sql_query, con = self.engine)
这里的想法是用默认的con
值覆盖pandas方法。所有这些函数都返回一个DataFrame
,最终,其用法将类似
db = dataBase('blah blah connection string')
df = db.read_sql_table('tablename') # note I don't need to specify con = engine
df.to_sql(con = ?) # could use con = db.engine, but I'd prefer
# to specify that in the dataBase class somewhere
问题在于这里没有默认的连接引擎。为了解决这个问题,我想写
pd.DataFrame.to_sql = partial(pd.DataFrame.to_sql, con = my_engine)
我想在某个地方,但是由于它是一个全局设置,所以我不能将它放在我的班级中,因为我需要在逐个班级基础上设置引擎的知识,所以我也不能将它放在外面。
很显然我有点糊涂了,我应该如何 。为了避免出现x-y问题,我认为最终目标是使用出现在任何位置的默认引擎覆盖con
;我该怎么做?
N.b我是一个完整的python新手,所以如果您完全不同地做这件事,我很想学习如何以及为什么