python - main.py 中的游标对象应该由另一个模块中的函数访问
问题描述
我正在尝试通过 python-function 访问数据库,它只需要我想要插入数据库的值。例如,我想将我的猫的名字和颜色插入到我的猫表中,我调用的函数应该是insert_to_cat('felix', 'orange')
.
为了做到这一点,我insert_to_cat()
在一个单独的模块中定义了 -function。我的意图是,我不必将光标作为附加参数传递给函数,因为如果我想多次调用该函数,那将是一件很痛苦的事情。我希望,因为我在主文件中创建了游标对象并调用了插入函数,所以游标对象实际上会在正确的范围内。不幸的是,情况并非如此,我收到以下错误:
Name Error: name 'c' is not defined
.
是否有可能在不将光标作为参数传递给函数的情况下实现我的目标?任何建议或解决方案表示赞赏。
解决方案
全局名称是当前模块命名空间的一部分。函数存在于它们的模块命名空间中,而不是其他任何地方。否则,导入的函数将无法访问导入到定义它们的同一模块中的任何内容,或者它们的行为将完全改变,具体取决于它们被导入的位置。
所以不,一个模块中的全局变量c
对于从另一个模块导入的函数是不可见的。
封装数据库功能的更好方法是使用一个类来对方法和状态(数据库连接、您在方法之间重用的任何游标等)进行分组。然后,当您为数据库创建一个实例时,这些方法都可以访问self
并在那里找到重要的值,而调用代码不需要知道它是如何管理的:
class SomeClassName:
def __init__(self, filename):
self.connection = sqlite3.connect(filename)
def some_method(self):
with self.connection:
cursor = self.connection.cursor()
cursor.exeucte('SELECT some, column FROM some_table')
for row in cursor:
some_data_processing(row)
return some_result
在需要使用结果的代码中,您只需要
some_variable = SomeClassName('....')
result = some_variable.some_method()
附带说明:最好为每个查询创建一个新游标。游标是给定查询和产生结果的句柄。虽然如果按顺序重复使用游标很好,但如果您首先使用游标选择一些行,然后获取其中一些(但不是全部)行,然后将游标用于第二个查询,第一个查询的行查询现在将消失。这很容易导致代码中的混乱和错误。
推荐阅读
- python - 将文本文件排序到每个新行的列表中,找到最大值并打印它所在的行号
- javascript - Google Script Failing --- TypeError: Cannot read property "length" from undefined
- bash - 在程序以状态退出后执行 EXIT 陷阱时的 Bash 函数范围状态!= 0 (set -e)
- python - 每次我想从多个 python 版本中使用 python3 时都需要取消设置 PYTHONPATH
- python - DynamoDB 获取不同的属性
- ios - 在数组数组中查找值
- jquery - jQuery 编辑的 Bootstrap datetimepicker 没有出现
- webpack - 通过 webpack 插入脚本
- ios - 在纯编程的 swift ios 应用程序中创建和利用可重用组件的策略?(UIKit 不是 SwiftUI)
- mysql-workbench - MySQL Workbench 无法在 Windows 8 上打开