【问题标题】:Add an incremental query within a defined insert query在定义的插入查询中添加增量查询
【发布时间】:2018-03-18 23:49:13
【问题描述】:

我有以下不完整的功能:

def logs(user_logs):

try:
    conn = psycopg2.connect(DB_CONNECTION_STRING)
    cursor = conn.cursor()

    cursor.execute("INSERT INTO \"Logs\" (user_id, telegram_nickname, command) VALUES (%s, %s, %s);", user_logs,)
    conn.commit()
    return None

except Exception as e:
    return e

我想在“命令”之后添加一个增量列,称为“使用”。目标是跟踪电报机器人命令的使用情况。 示例:command>/start usage>1 如果另一个用户键入 /start,则使用次数应增加 1,依此类推。

【问题讨论】:

  • 我在主文件中的日志函数旁边添加了“ .split(" ")[0] ”来解决输入问题。
  • 发布您的实际代码。浪费其他人的时间来考虑和回答你的问题......究竟是什么?您提到增量列,然后询问有关输入命令的问题,然后在评论中说明您已经解决了输入问题。请发布一个连贯的问题。
  • 你说得对,我已经编辑了我的问题 =)

标签: python postgresql logging bots telegram


【解决方案1】:

您的日志记录功能按用户 ID 对命令进行分组,但您似乎希望对所有用户进行总体计数?如果是这种情况,那么在日志表中添加“使用”列就没有什么意义了。

您可以使用单独的表来记录每个命令的使用次数,但是什么都不做要容易得多。保留当前日志表,然后使用 SQL 获取计数:

select count(*) from logs where command = '/start'

然后您可以找到任何命令的当前计数。

这也更灵活;如果您想要单个用户的计数,那么您可以增加 WHERE 子句以按用户 ID 过滤。也可以使用GROUP BY 进行分组。


原答案

你不能只将命令字符串的第一部分传递给日志函数吗?

if text.startswith('/'):
    command = text.split()[0]
    logs(user_id, telegram_nickname, command)
    if command == '/start':
    etc...etc..

这里str.split()用于抓取命令的第一部分进行日志记录。

【讨论】:

  • 我在主文件中有另一个函数来获取用户 ID、电报昵称和命令并将其传递给 OP 中的日志函数,是的,我已经通过使用 str.split 解决了这一部分() =) 谢谢
  • 你说得对。我的问题背后有一个大问题,我想通过 user_id 过滤命令的使用,这会导致一些问题,因为我会有多行具有相同的命令但不同的“用法”。您简单的 SELECT 查询肯定会解决我的问题,让代码保持原样!非常感谢!!!!
猜你喜欢
  • 2017-12-13
  • 2014-08-03
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2015-10-22
  • 2021-09-10
相关资源
最近更新 更多