检查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 表中选择 php 中的个人姓氏并将其放入 $_Session 变量中