Python 3.x 通过在输入框内输入标识号并按下按钮执行Oracle SQL查询

Python 3.x 通过在输入框内输入标识号并按下按钮执行Oracle SQL查询,python-3.x,tkinter,oracle11g,cx-oracle,Python 3.x,Tkinter,Oracle11g,Cx Oracle,我是python新手。我试图开发一个程序,在数据库中执行一些Oracle SQL查询。接下来的概念是:我在这里有一个输入框,我键入一个个人ID,然后我必须按下按钮,从输入框中收集输入的个人ID,并将其注入已经准备好的SQL查询中,然后执行查询并选择关于个人ID所有者的数据。现在我结巴了,我无法从输入框中收集数据。请帮忙。非常感谢 import tkinter as ibumt from tkinter import simpledialog import cx_Oracle def get_p

我是python新手。我试图开发一个程序,在数据库中执行一些Oracle SQL查询。接下来的概念是:我在这里有一个输入框,我键入一个个人ID,然后我必须按下按钮,从输入框中收集输入的个人ID,并将其注入已经准备好的SQL查询中,然后执行查询并选择关于个人ID所有者的数据。现在我结巴了,我无法从输入框中收集数据。请帮忙。非常感谢

import tkinter as ibumt
from tkinter import simpledialog
import cx_Oracle

def get_pn():
    global pn
    result = simpledialog.askstring
    pn = result # pn is like 01000476891

sql_pn = """ Select cl.EXTERNALID as CLIENT_NO , upc.USERNAME, ipe.FIRSTNAMEINLATIN as FIRSTNAME, ipe.LASTNAMEINLATIN as LASTNAME, ipe.IDENTIFICATIONNUMBER
where 1=1 and cpc3con.CONTRACTSUBTYPE = 'STB'
and dcu.STATUS='ACTIVE'
and ipe.IDENTIFICATIONNUMBER = :pn and rownum = 1 """""
#ipe.IDENTIFICATIONNUMBER = :pn << pn must automatically replaced by inputted pn number for example: 01000476891

con = cx_Oracle.connect('Test/test@160.28.76.89:1521/STBDB')
cur = con.cursor()
cur.execute(sql_pn, [pn])
for line in cur:
    print(line)
cur.close()
con.close()

width = 350
heigh = 600

root = ibumt.Tk()
root.title('ibumt')
root.resizable(height=False, width=False)

canvas = ibumt.Canvas(root, height=heigh, width=width)
canvas.pack()

frame_hider = ibumt.Frame(root, bg='gray')

frame_hider.place(relx=0.5, rely=0.005, relheight=0.07,relwidth=0.99, anchor='n')

label_hider = ibumt.Label(frame_hider, text="User Management Tool",   fg='black', bg='gray')
label_hider.config(font=("Courier", 9))
label_hider.place(relx=0.15, rely=0.25, relheight=0.5, relwidth=0.7)

frame_mid = ibumt.Frame(root, bg='dark gray')
frame_mid.place(relx=0.005, rely=0.08, relheight=0.6, relwidth=0.99)

label_pn = ibumt.Label(frame_mid, text="Personal Number :",   fg='white', bg='dark gray')
label_pn.place(relx=0.01, rely=0.02, relheight=0.08, relwidth=0.34)

entry_pn = ibumt.Entry(frame_mid, bg='white')
entry_pn.place(relx=0.37, rely=0.02, relheight=0.08, relwidth=0.35)

button_pn = ibumt.Button(frame_mid, text="Check Client", bg='gray',command=get_pn)
button_pn.place(relx=0.74, rely=0.02, relheight=0.08, relwidth=0.25)

label_output_pn_cn = ibumt.Label(frame_mid, fg='white', bg='white')
label_output_pn_cn.place(relx=0.009, rely=0.225, relheight=0.76,relwidth=0.983)

root.mainloop()

您必须使用StringVar对象

将tkinter作为ibumt导入 从tkinter导入simpledialog 导入cx_Oracle def get_pn: 全球pn result=my_stringvar.get这将把结果设置为当时输入框中的任何内容 pn=结果pn类似于01000476891 sql_pn=选择cl.EXTERNALID作为客户端_NO,upc.USERNAME,ipe.FIRSTNAMEINLATIN作为FIRSTNAME,ipe.LASTNAMEINLATIN作为LASTNAME,ipe.IDENTIFICATIONNUMBER 其中1=1,cpc3con.CONTRACTSUBTYPE='STB' 和dcu.STATUS='ACTIVE' 和ipe.IDENTIFICATIONNUMBER=:pn和rownum=1
ipe.IDENTIFICATIONNUMBER=:pn嗨,欢迎来到SO。我在你的帖子里看到了一些像Lsep这样的价值观?这只是一个分线器吗?你好,谢谢。是的,我只使用行分隔符,因为当我尝试使用带三元组的SQL查询时,我无法修改定义的变量>ipe.IDENTIFICATIONNUMBER=:pn