I want to send a session object of sqlalchemy to a function of another class .
From class OraDialog‘s function oraconnect to class oraconn‘s assign function .
Actually My need is to use the session object in oraconn‘s another function map
I can’t send the session object directly to map function because it is a slot – it is triggered before .
I intended to define the assign function primarily to get the session object.
The Error : ( including print statements )
<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'
The oraconn class’s assign and map functions :
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)
SO ,
The assign function receives the object properly . But the map function can’t use it – It says Nonetype
My Question :
Two functions of same class can’t use an object ?
I must have done something silly – so plz point out……
( I’m using windows7 / python 2.6 / PyQt4 /sqlalchemy /cx_oracle)
Edit :
The calling class :
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
Problem Solved :
The problem is – i’ve created two instances and passed from one to another .
Corrected code :
oraconn.assign(myapp,self.s)
where
oraconn -> class
assign -> function of oraconn
myapp -> instance of oraconn , declared for main application
self.s -> the argument i wanted to pass
Thank you Kirk ….
If you’re using Qt, then this is likely a GUI app. Maybe there are threading issues; maybe
selfrefers to different objects. It’s hard to tell with only what you’ve given us. Before you go any further, add:near the top of each method. At least then you can confirm whether both are operating on the same object.
In OraDialog.init, you’re saying
self.uiobj=oraconn(). Is that the object that’s giving you problems? If so: notice that you’re creating at as an instance variable, so that each OraDialog object has a different .uiobj object. Could you try making that a class variable by writing:instead? That is, define
uiobjas belonging to all instances of the class, not just one instance.