Я хочу отправить объект сеанса sqlalchemy в функцию другого класса.
Из класса Функция OraDialog oraconnect в класс oraconn * назначить функция.
На самом деле мне нужно использовать объект сеанса в oraconn другой функции map
Я не могу отправить объект сеанса напрямую в функцию map , потому что это слот - он срабатывает раньше.
Я намеревался определить функцию назначения прежде всего для получения объекта сеанса.
Ошибка: (включая операторы печати)
<sqlalchemy.orm.session.Session object at 0x030808F0>
<sqlalchemy.orm.session.Session object at 0x030808F0>
This is in assign
None
This is in map
Traceback (most recent call last):
File "C:\Users\Arul\Desktop\dbvis\oraconn.py", line 44, in map
for t in self.s.query(tables):
AttributeError: 'NoneType' object has no attribute 'query'
Функции присвоения и отображения класса oraconn:
def assign(self,s):
self.s=s
print self.s
print "This is in assign"
def map(self):
print self.s
print "This is in map"
self.table_no=0
for t in self.s.query(tables):
self.table_no=self.table_no+1
table_list.append(t.table_name)
self.item=QtCore.QStringList()
for c in self.s.query(columns):
self.item.append(c.column_name)
self.ui.list_col.addItems(self.item)
ТАК,
Функция назначить получает объект правильно. Но функция карты не может использовать это - это говорит, что Nonetype
Мой вопрос:
Две функции одного класса не могут использовать объект?
Я, должно быть, сделал что-то глупое - поэтому, пожалуйста, укажите ......
(я использую windows7 / python 2.6 / PyQt4 / sqlalchemy / cx_oracle)
Редактировать:
Класс вызова:
class OraDialog(QtGui.QDialog):
def __init__(self,parent=None):
QtGui.QDialog.__init__(self,parent)
self.odia=Ui_Dialog()
self.odia.setupUi(self)
self.uiobj=oraconn()
QtCore.QObject.connect(self.odia.but_con,QtCore.SIGNAL('clicked()'),self.uiobj.oraconnect)
def oraconnect(self):
self.setVisible(0)
eng_str="oracle://"+self.odia.line_user.text()+":"+self.odia.line_pass.text()+"@localhost:1521/"+self.odia.line_sid.text()+"?mode="+self.odia.line_role.text()
engine_str=str(eng_str)
engine=create_engine(engine_str)
Session=sessionmaker(engine)
self.s=Session()
print self.s
Решенная проблема:
Проблема в том, что я создал два экземпляра и перешел от одного к другому.
Исправленный код:
oraconn.assign(myapp,self.s)
, где
oraconn -> класс
назначить -> функция oraconn
myapp -> экземпляр oraconn, объявленный для основного приложения
self.s -> аргумент, который я хотел передать
Спасибо, Кирк ....