JT Tomato� 2018-12-26 11:43 采纳率: 20%
浏览 2434
已采纳

用Python 从Mysql中提取数据并将查询结果写进excel,但返回值不是SQL查询值 而是‘0’求高手指教

想要做一个能自动从Mysql中取数并添加到excel指定位置的程序,如以下步骤:

第一步:使用Python 从Mysql中提取数据

import pymysql

conn = pymysql.connect(host='localhost',user='root',passwd='QAZwsx12345678',db='test',port=3306,charset='utf8')
cur = conn.cursor()
cur.execute("use test")
cur.execute("SELECT Stu_Id FROM student WHERE student.Name='王老大'")
a = cur.fetchall()
b = a.__str__()

print(b)
cur.close()
conn.close
返回如图:
图片说明

第二部:使用GUI端,将Mysql的查询结果一键写进excel

import tkinter
import os
import openpyxl
from tkinter import *

class control :
def init(self, master):
fm1 = Frame(master)
Button(fm1, text='Top',command = self.exc).pack(side=TOP, anchor=W, fill=X, expand=NO,padx = 10, pady = 10,ipadx=10,ipady = 4)
fm1.pack(side=LEFT, fill=BOTH, expand=YES)
def exc(self):
wb = openpyxl.load_workbook('C:/Users/lenovo/Desktop/学生.xlsx')
sheet = wb.get_sheet_by_name('学生1')
sheet['A2'] = os.system('C:/Users/lenovo/PycharmProjects/Test.9.16/tests/New_created.py')
print(sheet['A2'].value)
wb.save('学生_copy.xlsx')

root = Tk()
root.title("Control")
display = control(root)
root.mainloop()

root = Tk()
root.title("Control")
display = control(root)
root.mainloop()

点击GUI按键后得到 返回值 如图:
图片说明

最终结果:但打开excel 后 发现添加的内容并非SQL的返回值,而是‘0’,请问高手们,这个是为什么?要怎么破呢?

图片说明

  • 写回答

1条回答 默认 最新

  • lyhsdy 2018-12-27 06:50
    关注

    ←如果以下回答对你有帮助,请点击右边的向上箭头及采纳下答案

    你第一步是不是保存为C:/Users/lenovo/PycharmProjects/Test.9.16/tests/New_created.py,如果你要调用函数应该封装起来,sheet['A2'] = os.system('C:/Users/lenovo/PycharmProjects/Test.9.16/tests/New_created.py')
    这样并不会给sheet['A2']赋值,因为os.system只是运行New_created.py这个python而已,并不会返回对应的值

    import pymysql
    import tkinter
    import os
    import openpyxl
    from tkinter import *
    
    
    def newcreated():
        conn = pymysql.connect(host='localhost',user='root',passwd='QAZwsx12345678',db='test',port=3306,charset='utf8')
        cur = conn.cursor()
        cur.execute("use test")
        cur.execute("SELECT Stu_Id FROM student WHERE student.Name='王老大'")
        a = cur.fetchall()
        ###  删掉这句   b = a.__str__()
        cur.close()
        conn.close
    
        return a ##返回a的值
    
    class control :
    def init(self, master):
    fm1 = Frame(master)
    Button(fm1, text='Top',command = self.exc).pack(side=TOP, anchor=W, fill=X, expand=NO,padx = 10, pady = 10,ipadx=10,ipady = 4)
    fm1.pack(side=LEFT, fill=BOTH, expand=YES)
    def exc(self):
    wb = openpyxl.load_workbook('C:/Users/lenovo/Desktop/学生.xlsx')
    sheet = wb.get_sheet_by_name('学生1')
    sheet['A2'] = newcreated()[0][0]    ##引用函数
    print(sheet['A2'].value)
    wb.save('学生_copy.xlsx')
    
    root = Tk()
    root.title("Control")
    display = control(root)
    root.mainloop()
    
    root = Tk()
    root.title("Control")
    display = control(root)
    root.mainloop()
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。