loq*_*qqi 5 python import config module
我对 Python 有点陌生(但对编程一点也不熟悉,已经精通 Perl、PHP 和 Ruby)。我遇到了我以前的所有语言和 Python 之间的一个主要区别:主要是我可以轻松地将数据从另一个文件读入整个项目。我想解决两个主要的例子:
1)我想要一个设置/配置文件(在 YAML 中),它可以在 config.py 文件中读取和解析。然后我希望项目中的所有其他文件都可以访问生成的 dict() 。我已经弄清楚如何做到这一点,from lib.project.config import cfg
但这意味着对于导入配置的每个页面,系统必须重新解析 yaml。这对我来说似乎很愚蠢。有没有办法只解析该文件一次,然后让我的项目中的任何其他文件可以访问结果?
2) 我想导入一个database.py 文件,然后查看我的配置,看看是否需要导入sqlite3、mysql 或postgresql 版本的数据库类。同样,我可以通过将逻辑直接放入需要数据库类的每个页面中来管理此问题。但我讨厌必须粘贴代码
if cfg.get('db_type') == 'sqlite':
from lib.project.databases.sqlite3 import database
elif cfg.get('db_type') == 'mysql':
from lib.project.databases.mysql import database
Run Code Online (Sandbox Code Playgroud)
在每个需要数据库类的文件的顶部。我更愿意添加:
import lib.project.database
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激。我已经做了很多谷歌搜索和 SO 搜索,但没有找到我的答案。希望你们中的一位奇才可以提供帮助。
谢谢。
更新:我这样做的原因(对于#2)是因为我还试图让其他类继承数据库类。所以lib/project/databases/sqlite.py是一个数据库类的定义。lib/project/databases/mysql.py 也是如此。这个想法是,在导入完成后,我可以导入像 users 类这样的类,并像这样定义它:
class user(database):
...
Run Code Online (Sandbox Code Playgroud)
从而继承了数据库类的所有结构和方法。您的建议是简单地根据 sqlite/mysql 逻辑/决策创建一个实例,然后将其传递到需要的地方,这是一个很好的解决方案。但我需要更多...想法?
1) 一切就绪 - 该文件只会被读取一次。
2)同意您不想复制任何类似的粘贴代码 - 如果您想在整个项目中使用 1 个数据库实例,您可以执行以下操作:
import lib.project
db = lib.project.database
Run Code Online (Sandbox Code Playgroud)
其中db
只是一个用于访问已创建的数据库的局部变量。您将实例化您的数据库database
(就像您对代码所做的那样解析if/elif
是使用 sqlite3 还是 mysql)lib/project/databases.py
,然后在您的lib/project/__init__.py
文件中执行一个from .databases import database
.
如果您想在整个项目中使用多个数据库(相同的 sqlite3/mysql 类型),您需要解析哪个构造函数Database
绑定到(或继承自)databases.py
:
from lib.project.Config import config
if config.db_type == 'sqlite' :
import lib.project.databases.Sqlite as Db
elif config.db_type == 'mysql':
import lib.project.databases.Mysql as Db
class Database(Db):
'''docs'''
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2723 次 |
最近记录: |