Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何在python中从sqlit3写入.txt文件_Python 2.7_Tkinter_Sqlite - Fatal编程技术网

Python 2.7 如何在python中从sqlit3写入.txt文件

Python 2.7 如何在python中从sqlit3写入.txt文件,python-2.7,tkinter,sqlite,Python 2.7,Tkinter,Sqlite,我对编程和python比较陌生。 我正在为一家健身房构建这个应用程序,以使用tkinter输入客户详细信息,我已经运行了所有程序,但我需要一种方法将客户电话号码从sqlite3数据库提取到txt文件中 这是后端脚本 import sqlite3 class database: def __init__(self,db): self.conn=sqlite3.connect(db) self.cur=self.conn.cursor() s

我对编程和python比较陌生。 我正在为一家健身房构建这个应用程序,以使用tkinter输入客户详细信息,我已经运行了所有程序,但我需要一种方法将客户电话号码从sqlite3数据库提取到txt文件中

这是后端脚本

import sqlite3

class database:
    def __init__(self,db):
        self.conn=sqlite3.connect(db)
        self.cur=self.conn.cursor()
        self.cur.execute("CREATE TABLE IF NOT EXISTS Customers (id INTEGER PRIMARY KEY, name text, Phone integer, gender text, DoB date )")
        self.conn.commit()

    def add(self,name,phone,gender,DoB):
        self.cur.execute("INSERT INTO Customers VALUES (NULL,?,?,?,?)",(name,phone,gender,DoB))
        self.conn.commit()

    def search(self,name="",phone="",DoB=""):
        self.cur.execute("SELECT * FROM Customers WHERE name=? OR phone=? OR DoB=?",(name,phone,DoB))
        rows=self.cur.fetchall()
        return rows

    def view(self):
        self.cur.execute("SELECT * FROM Customers")
        rows=self.cur.fetchall()
        return rows

    def delete(self,id):
        self.cur.execute("DELETE FROM Customers WHERE id=?",(id,))
        self.conn.commit()

    def edit(self,id,name,phone,gender,DoB):
        self.cur.execute("UPDATE Customers SET name=?,phone=?,gender=?,DoB=? WHERE id=?",(name,phone,gender,DoB,id))
        self.conn.commit()

    def __del__(self):
        self.conn.close()
from Tkinter import *
from backWM import database

database=database("customer.db")
#window.geometry("%dx%d" % (500, 300))

"""-------------------FUNCTIONS--------------------"""
def get_selected_row(event):
    global selected_tuple
    index=list1.curselection()[0]
    selected_tuple=list1.get(index)
    e2.delete(0,END)
    e2.insert(END,selected_tuple[1])
    e3.delete(0,END)
    e3.insert(END,selected_tuple[2])
    e4.delete(0,END)
    e4.insert(END,selected_tuple[4])

def add_command():
    database.add(name_text.get(),phone_text.get(),gender_text.get(),dob_text.get())
    list1.delete(0,END)
    list1.insert(END,(name_text.get(),phone_text.get(),gender_text.get(),dob_text.get()))
    e2.delete(0,END)
    e3.delete(0,END)
    e4.delete(0,END)

def search_command():
    list1.delete(0,END)
    for row in database.search(name_text.get(),phone_text.get(),dob_text.get()):
        list1.insert(END,row)

def delete_command():
    database.delete(selected_tuple[0])
    list1.delete(END,selected_tuple[0])
    e2.delete(0,END)
    e3.delete(0,END)
    e4.delete(0,END)

def view_command():
    list1.delete(0,END)
    for row in database.view():
        list1.insert(END,row)

def edit_command():
    database.edit(selected_tuple[0],name_text.get(),phone_text.get(),gender_text.get(),dob_text.get())
    e2.delete(0,END)
    e3.delete(0,END)
    e4.delete(0,END)

def set_list(event):
    """
    insert an edited line from the entry widget
    back into the listbox
    """
    try:
        index = list1.curselection()[0]
        # delete old listbox line
        list1.delete(index)
    except IndexError:
        index = END
    # insert edited item back into listbox1 at index
    list1.insert(index, name_text.get(),phone_text.get(),gender_text.get(),dob_text.get())

window=Tk()
window.wm_title("WhiteMountains Gym")
"""-------------------LABELS--------------------"""
l1=Label(window,text="CUSTOMER DETAILS")
l1.grid(row=0,column=1, columnspan=5)
l1.config(font=("Proggy", 30),width=20)

l2=Label(window,text="Name")
l2.grid(row=1,column=1)

l3=Label(window,text="Phone Number")
l3.grid(row=1,column=3)

l4=Label(window,text="D.O.B")
l4.grid(row=2,column=3)

"""-------------------ENTRY----------------"""
name_text=StringVar()
e2=Entry(window,textvariable=name_text)
e2.grid(row=1,column=2)
e2.config(width=30)
e2.bind('<<return>>', set_list)

phone_text=StringVar()
e3=Entry(window,textvariable=phone_text)
e3.grid(row=1,column=4)
e3.bind('<<return>>', set_list)

gender_text=StringVar()
gender_text.set('Gender')
choices=['Gender','Male','Female']
option=OptionMenu(window,gender_text,*choices)
option.grid(row=2,column=1,columnspan=2)
option.config(width=15)
option.bind('<<return>>', set_list)

dob_text=StringVar()
e4=Entry(window,textvariable=dob_text)
e4.grid(row=2,column=4)
e4.bind('<<return>>', set_list)
"""----------------------BUTTONS----------------"""
b1=Button(window,text="ADD",width=12,command=add_command)
b1.grid(row=1,column=6)

b2=Button(window,text="SEARCH",width=12,command=search_command)
b2.grid(row=2,column=6)

b3=Button(window,text="DELETE",width=12,command=delete_command)
b3.grid(row=3,column=6)

b4=Button(window,text="UPDATE",width=12,command=edit_command)
b4.grid(row=4,column=6)

b5=Button(window,text="VIEW ALL",width=12,command=view_command)
b5.grid(row=5,column=6)

b5=Button(window,text="CLOSE",width=12,command=window.destroy)
b5.grid(row=6,column=6)


"""----------------------LISTBOX----------------"""
list1=Listbox(window,height=20,width=70)
list1.grid(row=7,column=0,columnspan=4)

s1=Scrollbar(window)
s1.grid(row=3,column=4,rowspan=10)

list1.configure(yscrollcommand=s1.set)
s1.configure(command=list1.yview)

list1.bind('<<ListboxSelect>>',get_selected_row)




window.mainloop()
这是前端脚本

import sqlite3

class database:
    def __init__(self,db):
        self.conn=sqlite3.connect(db)
        self.cur=self.conn.cursor()
        self.cur.execute("CREATE TABLE IF NOT EXISTS Customers (id INTEGER PRIMARY KEY, name text, Phone integer, gender text, DoB date )")
        self.conn.commit()

    def add(self,name,phone,gender,DoB):
        self.cur.execute("INSERT INTO Customers VALUES (NULL,?,?,?,?)",(name,phone,gender,DoB))
        self.conn.commit()

    def search(self,name="",phone="",DoB=""):
        self.cur.execute("SELECT * FROM Customers WHERE name=? OR phone=? OR DoB=?",(name,phone,DoB))
        rows=self.cur.fetchall()
        return rows

    def view(self):
        self.cur.execute("SELECT * FROM Customers")
        rows=self.cur.fetchall()
        return rows

    def delete(self,id):
        self.cur.execute("DELETE FROM Customers WHERE id=?",(id,))
        self.conn.commit()

    def edit(self,id,name,phone,gender,DoB):
        self.cur.execute("UPDATE Customers SET name=?,phone=?,gender=?,DoB=? WHERE id=?",(name,phone,gender,DoB,id))
        self.conn.commit()

    def __del__(self):
        self.conn.close()
from Tkinter import *
from backWM import database

database=database("customer.db")
#window.geometry("%dx%d" % (500, 300))

"""-------------------FUNCTIONS--------------------"""
def get_selected_row(event):
    global selected_tuple
    index=list1.curselection()[0]
    selected_tuple=list1.get(index)
    e2.delete(0,END)
    e2.insert(END,selected_tuple[1])
    e3.delete(0,END)
    e3.insert(END,selected_tuple[2])
    e4.delete(0,END)
    e4.insert(END,selected_tuple[4])

def add_command():
    database.add(name_text.get(),phone_text.get(),gender_text.get(),dob_text.get())
    list1.delete(0,END)
    list1.insert(END,(name_text.get(),phone_text.get(),gender_text.get(),dob_text.get()))
    e2.delete(0,END)
    e3.delete(0,END)
    e4.delete(0,END)

def search_command():
    list1.delete(0,END)
    for row in database.search(name_text.get(),phone_text.get(),dob_text.get()):
        list1.insert(END,row)

def delete_command():
    database.delete(selected_tuple[0])
    list1.delete(END,selected_tuple[0])
    e2.delete(0,END)
    e3.delete(0,END)
    e4.delete(0,END)

def view_command():
    list1.delete(0,END)
    for row in database.view():
        list1.insert(END,row)

def edit_command():
    database.edit(selected_tuple[0],name_text.get(),phone_text.get(),gender_text.get(),dob_text.get())
    e2.delete(0,END)
    e3.delete(0,END)
    e4.delete(0,END)

def set_list(event):
    """
    insert an edited line from the entry widget
    back into the listbox
    """
    try:
        index = list1.curselection()[0]
        # delete old listbox line
        list1.delete(index)
    except IndexError:
        index = END
    # insert edited item back into listbox1 at index
    list1.insert(index, name_text.get(),phone_text.get(),gender_text.get(),dob_text.get())

window=Tk()
window.wm_title("WhiteMountains Gym")
"""-------------------LABELS--------------------"""
l1=Label(window,text="CUSTOMER DETAILS")
l1.grid(row=0,column=1, columnspan=5)
l1.config(font=("Proggy", 30),width=20)

l2=Label(window,text="Name")
l2.grid(row=1,column=1)

l3=Label(window,text="Phone Number")
l3.grid(row=1,column=3)

l4=Label(window,text="D.O.B")
l4.grid(row=2,column=3)

"""-------------------ENTRY----------------"""
name_text=StringVar()
e2=Entry(window,textvariable=name_text)
e2.grid(row=1,column=2)
e2.config(width=30)
e2.bind('<<return>>', set_list)

phone_text=StringVar()
e3=Entry(window,textvariable=phone_text)
e3.grid(row=1,column=4)
e3.bind('<<return>>', set_list)

gender_text=StringVar()
gender_text.set('Gender')
choices=['Gender','Male','Female']
option=OptionMenu(window,gender_text,*choices)
option.grid(row=2,column=1,columnspan=2)
option.config(width=15)
option.bind('<<return>>', set_list)

dob_text=StringVar()
e4=Entry(window,textvariable=dob_text)
e4.grid(row=2,column=4)
e4.bind('<<return>>', set_list)
"""----------------------BUTTONS----------------"""
b1=Button(window,text="ADD",width=12,command=add_command)
b1.grid(row=1,column=6)

b2=Button(window,text="SEARCH",width=12,command=search_command)
b2.grid(row=2,column=6)

b3=Button(window,text="DELETE",width=12,command=delete_command)
b3.grid(row=3,column=6)

b4=Button(window,text="UPDATE",width=12,command=edit_command)
b4.grid(row=4,column=6)

b5=Button(window,text="VIEW ALL",width=12,command=view_command)
b5.grid(row=5,column=6)

b5=Button(window,text="CLOSE",width=12,command=window.destroy)
b5.grid(row=6,column=6)


"""----------------------LISTBOX----------------"""
list1=Listbox(window,height=20,width=70)
list1.grid(row=7,column=0,columnspan=4)

s1=Scrollbar(window)
s1.grid(row=3,column=4,rowspan=10)

list1.configure(yscrollcommand=s1.set)
s1.configure(command=list1.yview)

list1.bind('<<ListboxSelect>>',get_selected_row)




window.mainloop()
从Tkinter导入*
从backWM导入数据库
数据库=数据库(“customer.db”)
#窗口几何体(“%dx%d”%(500300))
“”--------------------函数-----------------“”
def get_selected_行(事件):
全局选择元组
index=list1.curselection()[0]
选定的\u tuple=list1.get(索引)
e2.删除(0,结束)
e2.插入(结束,选定的\u元组[1])
e3.删除(0,结束)
e3.插入(结束,选定的\u元组[2])
e4.删除(0,结束)
e4.插入(结束,所选元组[4])
def add_命令():
添加(name_text.get()、phone_text.get()、gender_text.get()、dob_text.get())
列表1.删除(0,结束)
列表1.insert(END,(name_text.get(),phone_text.get(),gender_text.get(),dob_text.get())
e2.删除(0,结束)
e3.删除(0,结束)
e4.删除(0,结束)
def search_命令():
列表1.删除(0,结束)
查找数据库中的行。搜索(name_text.get()、phone_text.get()、dob_text.get()):
列表1.插入(结束,行)
def delete_命令():
database.delete(选定的\u元组[0])
列表1.删除(结束,选定的\u元组[0])
e2.删除(0,结束)
e3.删除(0,结束)
e4.删除(0,结束)
def view_命令():
列表1.删除(0,结束)
对于数据库中的行。视图()
列表1.插入(结束,行)
def edit_命令():
database.edit(选定的\u元组[0]、name\u text.get()、phone\u text.get()、gender\u text.get()、dob\u text.get())
e2.删除(0,结束)
e3.删除(0,结束)
e4.删除(0,结束)
def set_列表(事件):
"""
从条目小部件插入一个编辑过的行
返回列表框
"""
尝试:
index=list1.curselection()[0]
#删除旧列表框行
列表1.删除(索引)
除索引器外:
索引=结束
#在索引处将编辑的项插入列表框1
列表1.insert(索引、名称\文本.get()、电话\文本.get()、性别\文本.get()、目标\文本.get())
window=Tk()
window.wm_标题(“白山健身房”)
“”--------------------标签------------------“”
l1=标签(窗口,text=“客户详细信息”)
l1.网格(行=0,列=1,列span=5)
l1.config(字体=(“Proggy”,30),宽度=20)
l2=标签(窗口,text=“名称”)
l2.网格(行=1,列=1)
l3=标签(窗口,text=“电话号码”)
l3.网格(行=1,列=3)
l4=标签(窗口,text=“D.O.B”)
l4.网格(行=2,列=3)
“”------------------条目------------------“”“
name_text=StringVar()
e2=条目(窗口,文本变量=名称\文本)
e2.网格(行=1,列=2)
e2.config(宽度=30)
e2.绑定(“”,设置列表)
phone_text=StringVar()
e3=输入(窗口,文本变量=电话\文本)
e3.网格(行=1,列=4)
e3.绑定(“”,设置列表)
性别_text=StringVar()
性别\文本集(“性别”)
选项=[“性别”、“男性”、“女性”]
选项=选项菜单(窗口、性别文本、*选项)
选项.grid(行=2,列=1,列span=2)
option.config(宽度=15)
选项绑定(“”,设置列表)
dob_text=StringVar()
e4=条目(窗口,文本变量=dob_文本)
e4.网格(行=2,列=4)
绑定(“”,集合列表)
“”------按钮------------------“”“
b1=按钮(窗口,text=“添加”,宽度=12,命令=ADD\u命令)
b1.网格(行=1,列=6)
b2=按钮(窗口,text=“搜索”,宽度=12,命令=SEARCH\u命令)
b2.网格(行=2,列=6)
b3=按钮(窗口,text=“DELETE”,宽度=12,命令=DELETE\u命令)
b3.网格(行=3,列=6)
b4=按钮(窗口,text=“更新”,宽度=12,命令=编辑命令)
b4.网格(行=4,列=6)
b5=按钮(窗口,text=“查看全部”,宽度=12,命令=VIEW\u命令)
b5.网格(行=5,列=6)
b5=按钮(窗口,text=“CLOSE”,宽度=12,命令=window.destroy)
b5.网格(行=6,列=6)
“”------列表框------------------”
列表1=列表框(窗口,高度=20,宽度=70)
列表1.网格(行=7,列=0,列span=4)
s1=滚动条(窗口)
s1.网格(行=3,列=4,行跨度=10)
列表1.configure(yscrollcommand=s1.set)
s1.配置(命令=list1.yview)
列表1.bind(“”,获取选定行)
window.mainloop()

那么,如何将输入到“电话输入”窗口小部件中的每个新电话号码保存到txt文件中,以便我只能访问电话号码

def write_to_text_file(self):
    self.cur.execute("SELECT phone FROM Customers")
    rows = self.cur.fetchall()
    with open('phone_numbers','ab') as fou:
        for row in rows:
            fou.write(row[0])
    return fou
要在每次插入记录时更新,只需执行以下操作:

def add(self,name,phone,gender,DoB):
    self.cur.execute("INSERT INTO Customers VALUES (NULL,?,?,?,?)",(name,phone,gender,DoB))
    self.conn.commit()
    self.write_to_text_file(self)

您不会只想这样做:
从客户中选择电话
?选择后,请详细说明如何将其写入TXT;请编辑该问题,将其限制为特定问题,并提供足够的详细信息,以确定适当的答案为什么
fetchall
?只需在光标上迭代即可。@CL。谢谢您的评论。这是我习惯于先获取结果,然后对结果进行迭代的方式。我正在尝试这种方法,但它不起作用。我如何调用该函数以在输入后立即工作?我如何在光标上迭代。拜托,我是新来的this@bernie错误:我在调用返回self.func(*args)文件中的第1542行获得文件“C:\Python27\lib\lib tk\Tkinter.py”。在add_命令数据库中的第20行获得文件“\frontWM.py”。add(name_text.get(),phone_text.get(),gender_text.get()),dob_text.get())文件“C:\Python\WhiteMountains\backWM.py”,第13行,在添加write_to_text_File(self)name错误:未定义全局名称“write_to_text_File”