Python 2.7 MySQLdb将从数据库读取的最后一行保存到文本文件中

标签 python mysql excel python-2.7

我的任务是获取 MySQL 数据库以将数据发送到 Salesforce 并创建票证。我目前使用 python 从数据库下载所需的表并将该信息保存到 .xlsx 表中。然后我有另一个 python 脚本将该数据上传到 Google 文档表,然后使用 Javascript 触发器将数据提交到 salesforce,所有工作都按我的预期进行。

我遇到的问题是,当它从 MySQL 中提取数据时,它一次又一次地提取相同的信息,我需要它记住上次获取的最后一行或客户 ID,保存该 ID 或行到 .txt 文件中,然后在下次脚本运行时提取相同的数据,以便从该行或 ID 开始,而不是再次从顶部开始。

任何帮助将不胜感激。

#!/usr/bin/python
import smtplib
import base64
import os
import sys
import csv
from xlsxwriter.workbook import Workbook
import xlwt
import MySQLdb
def sql_run():
ur = 'user' # your username
pd = 'password' # your password
ht = '192.168.1.10' # your host
pt = 3306
db = 'database' # database where your table is stored
#table = 'rma_customer' # table you want to save

con = MySQLdb.connect(user=ur, passwd=pd, host=ht, port=pt, db=db)
cursor = con.cursor()

query = "SELECT cus_id, cus_username FROM database.rma_customer"
query0 = "SELECT cus_firstname, cus_lastname, cus_cell_phone FROM database.rma_customer_details"
query1 = "SELECT cus_address_1 FROM database.rma_customer_address"
query2 = "SELECT cus_city, cus_postcode FROM database.rma_customer_address"
query3 = "SELECT regpro_model_type, regpro_buy_location, regpro_sn FROM database.rma_reg_product"
cursor.execute(query)
workbook = Workbook('outfile.xlsx')
sheet = workbook.add_worksheet("Warranty Info")
headers = ['ID', 'Email', 'FirstName', 'LastName', 'Phone', 'Street', 'City', 'Postal', 'Product', 'Store', 'SN']
for i, header in enumerate(headers):
    sheet.write(0, i, header)
for r, row in enumerate(cursor.fetchall()):
    r = r + 1
    for c, col in enumerate(row):

        sheet.write(r, c, col)

cursor.execute(query0)  
for r, row in enumerate(cursor.fetchall()):
    r = r + 1
    for c, col in enumerate(row):

        sheet.write(r, c+2, col)        

cursor.execute(query1)  
for r, row in enumerate(cursor.fetchall()):
    r = r + 1
    for c, col in enumerate(row):

        sheet.write(r, c+5, col)

cursor.execute(query2)  
for r, row in enumerate(cursor.fetchall()):
    r = r + 1
    for c, col in enumerate(row):

        sheet.write(r, c+6, col)

cursor.execute(query3)  
for r, row in enumerate(cursor.fetchall()):
    r = r + 1
    for c, col in enumerate(row):

        sheet.write(r, c+8, col)

cursor.close ()
workbook.close()
con.close ()
sys.exit()
# exit the program



sql_run()

最佳答案

  1. 在您从中提取信息的中添加一个
  2. 提取 id(第 0 行)作为唯一标识符
  3. 使用 TrueFalse 等内容更新具有 idrow
  4. 为您的查询提供一个条件,该行必须为True/False

这样您就可以确保它停止迭代相同的信息。

以编程方式:

query = "SELECT cus_id, cus_username FROM database.rma_customer WHERE row = 'True'"
...

data = cursor.execute(query)
for col in data:
    id = col[0]
...
cursor.execute("""
    UPDATE table
    SET row= %s
    WHERE id= %s
""", (row, id))

... 代表您的代码。我无法猜测您要将代码片段放置在哪里。

关于Python 2.7 MySQLdb将从数据库读取的最后一行保存到文本文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455484/

相关文章:

MySQL查询,其中一对值不存在于另一个表中

vba - 比较 2 个工作簿中的 2 列,如果找到匹配则复制匹配的行

excel - 如何在 VBA 中使用 Excel 的内置模函数 (MOD)?

python - 如何在Python中使用glob模式读取目录中的文件?

php - Ajax - 单击按钮时更新 div 标签

php - MySQL 一次并发连接数过多

sharepoint - 是否可以通过 VBA 检查文件是否存在于共享点站点上?

javascript - 如何在 Django 模板中迭代字典?

python - 使用 python 脚本编译 Latex 文件

python - 异常: invalid literal for int() with base 10: ''