【问题标题】:NameError: name 'Database' is not definedNameError:名称“数据库”未定义
【发布时间】:2018-05-15 16:10:52
【问题描述】:

我不断收到错误“Database.db_search(search) NameError: name 'Database' is not defined”。

如果有人可以帮助我,我将不胜感激,我也是 Stack Overflow 的新手,因此对于我在提问的整体布局方面可能犯的任何错误,我深表歉意。

谢谢。

数据库文件

from Staff import *

def db_search(self):
   query = "SELECT * FROM customer_information WHERE Last_Name = %s"
   cursor.execute(query, (last_name,))
   for (Last_Name) in cursor:
        print(Last_Name)
   return last_name

员工档案:

from Database import *
def gett():
    search = search_entry.get()
    Database.db_search(search)`

【问题讨论】:

  • 除了我的回答之外,我想问一下您为什么要进行循环导入?为什么Database需要导入所有Staff,如果Staff也导入所有Database??
  • 嗨,Greg,非常感谢您抽出宝贵时间查看我的代码,我之所以进行循环导入,是因为程序中的其他地方正在执行其他方法/函数。如果你愿意,我可以告诉你,你可以给我任何关于如何改进的提示。真的很感谢时间的伙伴。再次感谢,祝您晚上愉快。
  • 嘿臭名昭著。老实说,我不会查看你所有的代码并提出改进建议,我只是没有时间。我要说的是,通常循环导入是个坏主意(stackabuse.com/python-circular-imports)。通常情况下,如果您查看每个模块的内容,您将意识到一种更好地将功能组合在一起的方法,从而消除了循环依赖的需要。并非总是如此,有时具有循环 dep 是有效的,但通常表明设计不佳,并可能引入副作用/更奇怪的错误。

标签: python-3.5


【解决方案1】:

通过使用

from Database import *

您刚刚导入了Database 的所有内容,因此您现在只需调用即可让其工作

db_search(search)

from module import * 并不是真正推荐的模式,因为您最终会污染您的命名空间(可能会混淆来自不同包的方法)。

因此,如果您将导入行更改为:

import Database

那么你的代码就可以正常工作了。

【讨论】:

  • 我明白这一点。 OP 也会收到该评论的通知。促使我发表评论的是 OP 有asked another question。我有时会检查他们之前的问题,看看他们是否接受了之前问题的答案。如果他们还没有这样做,我会轻推他们。
  • 公平竞争。好事做。继续:)
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 2021-04-15
相关资源
最近更新 更多