当我试图访问self.cursor_dat' from class in different script. It says:ImportError:无法导入名称query_selection_class`时,我遇到了奇怪的错误。在不尝试访问变量的情况下也会发生错误。import命令有问题。
下面是创建变量的file1.py:
class connection_settings_class(QtGui.QMainWindow,Ui_main_connection_settings_window):
def __init__(self):
self.create_connection_window()
self.host = 'localhost'
self.port = '3307'
self.user = 'root'
self.password = ''
self.database = 'rtr'
def connection(self):
""" connect to the database and create cursor that will be used to exetute MySQL queries """
try:
self.cnxn = pyodbc.connect(driver = '{MySQL ODBC 5.3 ANSI Driver}', # ANSI or Unicode
host = self.host,
port = self.port,
user = self.user,
password = self.password,
database = self.database)
except:
print('Connection FAIL')
**self.cursor_dat** = self.cnxn.cursor()
**self.cursor_dat**.execute("""SELECT * FROM test_db.attempt;""")
row = **self.cursor_dat**.fetchone()
if row:
print("Succesfully connected to the database.")
print row
self.status_label.setText("Connected")
else:
print("Connection FAIL")
self.status_label.setText("Disconnected")
def create_connection_window(self):
...rest of the code...and这里是file2
import file1 -> I also tried from file1 import connection_settings_class
class plausible_implausible_class(QtGui.QMainWindow,Ui_plausible_implausible_win):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
self.show()
sc = MyStaticMplCanvas(self.centralwidget, width=500, height=400, dpi=100)
self.verticalLayout_3.addWidget(sc)
**a = file1.connection_settings_class.cursor_dat**发布于 2016-02-24 19:53:05
好的,路径没有问题,因为@tdelaney提到的所有脚本都是正的。其结果为'/Users/BauchMAC/PycharmProjects/py_GUI/Database_GUI‘-> True。使用os.getcwd()获得的工作目录是相同的。
我还试着创建两个新脚本,一切都正常运行。所以问题是,我不理解在python中“导入规则”,因为这是问题的根源。
因此,进口跨越存在着明显的问题。解决这一问题的方法是将值作为参数进行传递。
下面您可以看到我是如何做的,以及错误的原因:
file1:
from try4 import ClassB
class ClassA():
def __init__(self):
self.cursor_dat = 1
self.query_selection_win = ClassB()
object1 = ClassA()档案2:
from try3 import ClassA <-- source of the probles
class ClassB():
def __init__(self, cursor_dat):
print(ClassA.cursor_dat)这里是它应该是怎样的(至少它的工作,我不确定这是否是最好的方法如何做,我仍然是新手)
档案1:
from try4 import ClassB
class ClassA():
def __init__(self):
self.cursor_dat = 1
self.query_selection_win = ClassB(self.cursor_dat)
object1 = ClassA()档案2:
class ClassB():
def __init__(self, cursor_dat):
print(cursor_dat)我希望它能对像我这样的新手有所帮助:)
发布于 2016-02-24 17:40:19
我看你的样本可能犯了一个非常愚蠢的错误,但我看到的是:
self.cursor_dat= self.cnxn.cursor()在connection_settings_class.connection()方法中定义。您从不调用connection(),因此该属性永远不会被创建。
我还注意到,您是静态地调用类,而不是创建类的实例,但是没有创建静态属性,它们都是在__init__上创建的。您可能希望创建类的一个实例,然后该类首先将cursor_dat定义为None。
如果您想要共享连接,您可以设置一个连接池,并仍然创建单独的实例。
https://stackoverflow.com/questions/35608976
复制相似问题