实例没有属性(python)

实例没有属性(python),python,class,attributeerror,Python,Class,Attributeerror,我有一个奇怪的问题,可能很容易解决 我有一个带有\uuuu init\uuuu和executeDictMore方法的类数据库 然后在db_functions.py文件中实例化该类: from Database import Database db = Database() 我从db_函数中调用executeictmore方法: def test(id): query = "SELECT * FROM table WHERE table_id=%s;" %(id) return

我有一个奇怪的问题,可能很容易解决

我有一个带有
\uuuu init\uuuu
executeDictMore
方法的类数据库

然后在db_functions.py文件中实例化该类:

from Database import Database
db = Database()
我从db_函数中调用executeictmore方法:

def test(id):
    query = "SELECT * FROM table WHERE table_id=%s;" %(id)
    return db.executeDictMore(query)
现在是奇怪的部分。 如果我导入db_函数并从python控制台调用db_functions.test(id):

import db_functions
t = db_functions.test(12)
它很好用。 但是如果我在另一个python文件中执行相同的操作,则会出现以下错误:

AttributeError: Database instance has no attribute 'executeDictMore'
我真的不明白这里发生了什么。我想我没有其他数据库类。我在sys.path中添加了模块所在的文件夹,因此它应该调用正确的模块


如果有人有想法,那是非常受欢迎的。

我不太确定出了什么问题,但您可以尝试将数据库对象作为参数传递给函数,如
db\u函数。测试(db,12)
使用db作为您的数据库类

我不太确定是什么问题,但您可以尝试将数据库对象作为参数传递给函数,如
db\u函数。测试(db,12)
使用db作为您的数据库类

您的路径中的某处有另一个
数据库
模块或包,它将被导入

要诊断其他模块所在的位置,请添加:

import Database
print Database.__file__

在从数据库导入数据库的
行之前;它将打印模块的文件名。您必须将一个或另一个模块重命名为不冲突。

您的路径中的某个地方有另一个
数据库
模块或包,它将被导入

要诊断其他模块所在的位置,请添加:

import Database
print Database.__file__
在从数据库导入数据库的
行之前;它将打印模块的文件名。您必须将一个或另一个模块重命名为不冲突。

如果您想在搜索路径中首先插入(而不是附加)到
系统路径中,则应将其插入:

sys.path.insert(0, '/path/to/your/Database/class')
如果希望在搜索路径中首先插入(而不是追加)到
sys.path
,则应将其插入:

sys.path.insert(0, '/path/to/your/Database/class')

您至少可以尝试避免SQL注入。Python提供了这样的简洁方法:

def executeDictMore(self, query, data=None):
    self.cursor.execute(query, data)

这些都是实现这一目标的方法


很抱歉,这应该是一个评论,但答案允许更好的格式。我知道它不能回答您的问题…

您至少可以尝试避免SQL注入。Python提供了这样的简洁方法:

def executeDictMore(self, query, data=None):
    self.cursor.execute(query, data)

这些都是实现这一目标的方法


很抱歉,这应该是一个评论,但答案允许更好的格式。我知道它没有回答你的问题…

你能发布“来自另一个python文件”的代码吗?这样我们就可以看到你如何使用
db
实例了?我可以假设您多次导入
Database.py
?在这种情况下,可能会出现db已经在全局范围中定义的问题,并导致一些可疑的问题。(只是头脑风暴)你能发布“来自另一个python文件”的代码吗?这样我们就可以看到你如何使用
db
实例了?我可以假设您多次导入
Database.py
?在这种情况下,可能会出现db已经在全局范围中定义的问题,并导致一些可疑的问题。(只是头脑风暴)我也想到了这一点,但你不需要这样做,因为一旦导入并实例化了
db
对象,就应该可以从导入
Database.py
文件并访问
db
对象的任何模块访问它。我也想到了这一点,但是您不需要这样做,因为一旦导入并实例化了
db
对象,就可以从导入
Database.py
文件并访问
db
对象的任何模块访问该对象。