Найти - Пользователи
Полная версия: Функция, переменные
Начало » Python для новичков » Функция, переменные
1 2
n2b
есть файл 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 я ее могу использовать.
py.user.next
эта переменная не возвращается, возвращается её значение, а сама она разрушается (отвязывается имя)
n2b
Так что надо сделать чтобы значение переменной возвращаемой функции было в переменной?
Подскажите пожалуйста, что нужно сделать чтобы все было хорошо.. :)
pill
schemas = Get_DB_Schemas(connection)
n2b
Это объявление мне надо делать в том файле где мне нужна переменная(файл 1.пу) или там где я хочу использовать эту переменную (2.пу)?
И такой вопрос:
Вот у меня в файле 1.пу есть еще одна функция, которая возвращает connection, но вхъодные параметры для этой функции находятся в файле 3.пу, а получить переменную connection мне надо в файле 2.пу. Как быть?
n2b
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()
n2b
то есть как я понимаю, чтобы получить переменную schemas мне надо:
получить переменную connection, чтобы получить переменную connection, мне нужно выудить входные параметры dblogin, dbpass, dbtns.
Вот тут и зазгвоздка, у меня никак не получается их выудить. Я даже не понимаю как это сделать… Код где в нарисованных формах они вводятся я написал постом выше.
sp3
1.py переименуйте скажем в file1.py
в коде файла 2
from file1 import Get_DB_Schemas
schemas = Get_DB_Schemas(connection)
n2b
1, 2, 3 это я только для примера ввел.

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

И да, все import у меня прописаны. Все нормально. Главный вопрос, как вытащить переменные dblogin, dbpass, dbtns из кода представленного выше.
pyuser
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 #################################
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB