我正在开发一个涉及编写数据的Python 3项目。现在,我希望用户能够选择要写入的数据格式 - pickle,SQLite,PostgreSQL等。 好吧,pickle和sqlite支持内置于Python中,所以不用担心。但是其他东西需要导入其他模块。
该项目没有涉及不必要的细节,包括以下内容:
具有ProjectClass
,read
等方法的类write
,它将数据写入列,创建新列等。因此,用户在创建{{{}对象时选择后端。 1}}输入:
ProjectClass
后端处理所有数据库内容(因此from project import ProjectClass
instance = ProjectClass(backend='MySQL')
instance.write(column_name='column1', data=some_data)
与数据库无关)。
ProjectClass
,read
和其他方法调用write
中的函数,它们调用的函数取决于创建它时传递给backends.py
实例的后端类型。
现在,我无法完全理解如何:
ProjectClass
等)我应该将后端拆分为每种数据库类型的单独文件,当用户创建psycopg2
实例时,它会尝试导入必要的文件(ProjectType
for PostgreSQL,postgresqlbackend.py
对于MySQL等,并查看导入是否失败(由于缺少在mysqlbackend.py
文件中导入的包)?
答案 0 :(得分:2)
我是否应该将后端拆分为每个数据库的单独文件 类型,当用户创建ProjectType实例时,它会尝试 导入必要的文件
这听起来不错。不要忘记,您也可以在任何地方导入模块(它可以在函数内部 - 它不需要位于文件的顶部)。然后,您可以使用import
包围此try/except
语句,并事先警告用户。
try:
import non_existant_module
except ImportError as e:
print e.message # prints "No module named non_existant_module"
最好的方法IMO是在加载运行时配置后首次启动程序时打印此错误,指定将使用哪个模块/数据库类型。这样就可以立即通知用户。