Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 9, 2011 23:05:48

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция, переменные

есть файл 1.py и 2.py

в файле 1.пу прописана функция, которая возвращает переменную schemas
вот она:

def Get_DB_Schemas(connection):
import cx_Oracle
cursor = cx_Oracle.Cursor(connection)
sql_sel = "select USERNAME from dba_users"
cursor.execute(sql_sel)
data = cursor.fetchall()
schemas = (data,)
print schemas
cursor.close()
return schemas
но при этом, я не могу использовать переменную schemas в файле 2… вопрос, почему?

Если явно объявить переменную, например x=“2”, то в файле 2 я ее могу использовать.



Офлайн

#2 Окт. 10, 2011 04:03:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9969
Репутация: +  856  -
Профиль   Отправить e-mail  

Функция, переменные

эта переменная не возвращается, возвращается её значение, а сама она разрушается (отвязывается имя)



Офлайн

#3 Окт. 10, 2011 12:17:10

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция, переменные

Так что надо сделать чтобы значение переменной возвращаемой функции было в переменной?
Подскажите пожалуйста, что нужно сделать чтобы все было хорошо.. :)



Офлайн

#4 Окт. 10, 2011 14:08:01

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция, переменные

schemas = Get_DB_Schemas(connection)



Офлайн

#5 Окт. 10, 2011 14:11:25

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция, переменные

Это объявление мне надо делать в том файле где мне нужна переменная(файл 1.пу) или там где я хочу использовать эту переменную (2.пу)?
И такой вопрос:
Вот у меня в файле 1.пу есть еще одна функция, которая возвращает connection, но вхъодные параметры для этой функции находятся в файле 3.пу, а получить переменную connection мне надо в файле 2.пу. Как быть?



Офлайн

#6 Окт. 10, 2011 14:19:29

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция, переменные

pill
schemas = Get_DB_Schemas(connection)
При такой строчке, он ругается что переменная коннектион не объявлена.

вот функция возвращающая коннектион
def OpenDB(dblogin,dbpass,dbtns):
try:
import cx_Oracle
print "Import OK"
except ImportError,info:
print "Import Error:", info
sys.exit()

if cx_Oracle.version<'3.0':
print "Very old version of cx_Oracle :", cx_Oracle.version
sys.exit()

try:
connection = cx_Oracle.connect("%s/%s@%s" % (dblogin, dbpass, dbtns))
print "Connection OK"
except ImportError, info:
print "Import Error: ", info

return connection
Переменные dblogin, dbpass, dbtns получаются в другом файле(3.py) из окошек ввода TextCtrl при нажатии на кнопку, вот код:
class frame_pass(wx.Frame):
def __init__(self):
global passwTxt, loginTxt, tnsTxt
wx.Frame.__init__(self, None, -1, 'Text Entry Example',
size=(250, 150))
panel = wx.Panel(self, -1)
login = wx.StaticText(panel, -1, "Login:")
loginTxt = wx.TextCtrl(panel, -1, "",
size=(175, -1))
tns = wx.StaticText(panel, -1, "TNS:")
tnsTxt = wx.TextCtrl(panel, -1, "",
size=(175, -1))
loginTxt.SetInsertionPoint(0)
passw = wx.StaticText(panel, -1, "Password:")
passwTxt = wx.TextCtrl(panel, -1, "", size=(175, -1),
style=wx.TE_PASSWORD)
sizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)
sizer.AddMany([login, loginTxt, tns, tnsTxt, passw, passwTxt])
panel.SetSizer(sizer)

self.ConnectBtn = wx.Button(panel, -1, "Connect", pos=(40, 100))
self.Bind(wx.EVT_BUTTON, self.OnConnectBtn, self.ConnectBtn)
self.ConnectBtn.SetDefault()

self.CancelBtn = wx.Button(panel, -1, "Cancel", pos=(135, 100))
self.Bind(wx.EVT_BUTTON, self.OnCancelBtn, self.CancelBtn)


def OnConnectBtn(self, event):
global connection
dblogin = loginTxt.GetValue()
dbpass = passwTxt.GetValue()
dbtns = tnsTxt.GetValue()
connection = unit_database.OpenDB(dblogin, dbpass, dbtns)
self.Destroy()

def OnCancelBtn(self, event):
self.Destroy()



Отредактировано (Окт. 10, 2011 14:30:49)

Офлайн

#7 Окт. 10, 2011 15:14:56

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция, переменные

то есть как я понимаю, чтобы получить переменную schemas мне надо:
получить переменную connection, чтобы получить переменную connection, мне нужно выудить входные параметры dblogin, dbpass, dbtns.
Вот тут и зазгвоздка, у меня никак не получается их выудить. Я даже не понимаю как это сделать… Код где в нарисованных формах они вводятся я написал постом выше.



Офлайн

#8 Окт. 10, 2011 17:24:29

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Функция, переменные

1.py переименуйте скажем в file1.py
в коде файла 2

from file1 import Get_DB_Schemas
schemas = Get_DB_Schemas(connection)



Офлайн

#9 Окт. 10, 2011 18:15:22

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция, переменные

1, 2, 3 это я только для примера ввел.

На строчку schemas = Get_DB_Schemas(connection) в самом файле 1.пу мне выдает ошибка что переменная connection не задана.
Чтобы получить переменную connection мне нужны входные данные для функции OpenDB, эти входные данные вводит пользователь в файле 3.пу. Отсюда и вопроса, как получить данные для функции OpenDB которая уже выдаст connection. Весь код выше я изложил. Входные данные это dblogin, dbpass, dbtns.

И да, все import у меня прописаны. Все нормально. Главный вопрос, как вытащить переменные dblogin, dbpass, dbtns из кода представленного выше.



Отредактировано (Окт. 10, 2011 18:23:32)

Офлайн

#10 Окт. 11, 2011 03:51:51

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Функция, переменные

import wx
################################################################################

class Password(wx.Dialog):
def __init__(self):
super(Password, self).__init__(None, -1, "Text Entry Example",
size=(250, 150))

login = wx.StaticText(self, -1, "Login:")
self.loginTxt = wx.TextCtrl(self, -1, "", size=(175, -1))

tns = wx.StaticText(self, -1, "TNS:")
self.tnsTxt = wx.TextCtrl(self, -1, "", size=(175, -1))

passw = wx.StaticText(self, -1, "Password:")
self.passwTxt = wx.TextCtrl(self, -1, "", size=(175, -1),
style=wx.TE_PASSWORD)

self.OkBtn = wx.Button(self, wx.ID_OK, "Ok")
self.OkBtn.SetDefault()

CancelBtn = wx.Button(self, wx.ID_CANCEL, "Cancel")

sizer = wx.BoxSizer(wx.VERTICAL)

grid = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)
grid.AddMany([login, loginTxt, tns, tnsTxt, passw, passwTxt])
sizer.Add(grid, 0, wx.ALL|wx.EXPAND, 8)

s = wx.BoxSizer(wx.HORIZONTAL)
s.Add((10, 10), 1, wx.EXPAND, 0)
s.Add(self.OkBtn, 0, wx.RIGHT, 8)
s.Add(CancelBtn, 0, wx.RIGHT, 0)
sizer.Add(s, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.EXPAND, 8)

self.SetSizer(sizer)
sizer.Fit(self)
self.Layout()
self.Centre()

self.Bind(wx.EVT_CLOSE, self.OnCloseDialog)
self.Bind(wx.EVT_IDLE, self.OnIdle)

def OnIdle(self, event):
self.OkBtn.Enabled = self.loginTxt.GetValue() and \
self.tnsTxt.GetValue() and self.passwTxt.GetValue

def OnCloseDialog(self, event):
self.EndModal(wx.ID_CANCEL)
################################################################################

def get_password():
info = None
dlg = Password()
if wx.ID_OK == dlg.ShowModal():
info = (dlg.loginTxt.GetValue(), dlg.tnsTxt.GetValue(), dlg.passwTxt.GetValue)
dlg.Destroy()
return info
################################## End Of File #################################



Отредактировано (Окт. 11, 2011 03:54:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version