检查mysql表中的变量并调整数字

Posted

技术标签:

【中文标题】检查mysql表中的变量并调整数字【英文标题】:Checking a variable in a mysql table and adjusting numbers 【发布时间】:2022-01-23 19:50:35 【问题描述】:

我在 mysql 中有一个名为 set_payment7777 的表。它存储了一些客户的信息。它存储他们的姓氏、数量和变量。这个变量是一个枚举,它可以是 N 或 Y。我目前正在做的是获取在 2 个日期之间完成的条目并将它们写入文件。代码是:

query = "SELECT customer_surname, amount, variable FROM set_payment7777 WHERE date_ >= %s AND date_ <= %s"
mycursor.execute(query, (from_date, to_date))
for row in mycursor:
    file.write("\t".join(map(str, row)))
    file.write("\n")

现在困难的部分是,如果变量设置为 Y,我希望它乘以这两个日期之间的月数。

我已经实现了获取月数:

num_months = (to_date.year - from_date.year) * 12 + (to_date.month - from_date.month)

但我无法检查变量是否设置为 Y 以将我在 for 循环中得到的行乘以 num_months。 (如果变量设置为 N,我想保留以前的金额)注意:可能有多个条目,有些可能将变量设置为 Y,有些设置为 N

【问题讨论】:

您能否进一步解释一下为什么“在 for 循环中无法检查变量是否设置为 Y...”?谢谢。 因为这就是我要问的。我正在尝试检查我得到的行是否将变量设置为 Y,如果是,我试图将行的数量乘以 num_months 【参考方案1】:

因为结果是一个列表容器,所以您可以使用数字索引来访问列表元素。如果这太不透明和脆弱,您可以查看 DictCursor。现在,这样的事情应该可以工作:

query = """SELECT customer_surname, amount, variable 
           FROM set_payment7777 
           WHERE date_ >= %s AND date_ <= %s"""
mycursor.execute(query, (from_date, to_date))
for row in mycursor:
    if row[2].upper() == 'Y':  # i choose to do .upper() or .lower() just in case
        num_months = ((to_date.year - from_date.year) * 12 + 
                      (to_date.month - from_date.month))
        row[1] *= num_months 
    file.write("\t".join(map(str, row)))
    file.write("\n")

另外,您可以考虑使用csv 模块来编写制表符分隔的文件。我认为,这通常是更可取的方式,除非您有该模块无法处理的特定需求。

【讨论】:

以上是关于检查mysql表中的变量并调整数字的主要内容,如果未能解决你的问题,请参考以下文章

mysql存储过程,选择最大值并插入值并分配给变量

从mysql 5.7中的变量将多行插入表中

如何从 mysql 表中选择 php 中的个人姓氏并将其放入 $_Session 变量中

从表中的一系列数字中获取范围并将所有范围存储在 PLSQL/Oracle Forms 中的字符串变量中

如何使用 PHP 获取 MySQL 表中的行数?

sql中的变量定义