【问题标题】:Discord.py and SQL: Not all members are being added to the databaseDiscord.py 和 SQL:并非所有成员都被添加到数据库中
【发布时间】:2021-04-22 09:21:29
【问题描述】:

当我运行这个命令/查询时,并不是每个人都被添加到数据库中,只有少数成员被添加。我尝试查看成员的“状态”是否重要,但事实并非如此

@client.event
async def on_ready():
    print("Bot is Ready")
    guild = client.get_guild(GUILD_NUM)
    print(f"{guild}")
    memberList = guild.members
    print(memberList)
    for m in memberList:
        c.execute(f"""INSERT INTO dodos 
                VALUES ('{m.id}',0,0,0,0,0,0,0,0,0,0,0,0,0)
                """)
        conn.commit()

        print(f"Adding {m} into database as {m.id}")
        c.execute(f"""SELECT *
                        FROM dodos
                        WHERE id = {m.id}
        """)
        conn.commit()
        print(c.fetchall())

代码:

【问题讨论】:

  • 这里cconn有什么区别?你只提交conn
  • conn 是我的 sqlite3 连接,c 是 conn.cursor()
  • 可能值得用 SQLAlchemy 清理它并使用对象来表示您的表。然后你可以用conn.add(...) 代替原始的 SQL 语句。这可能最终会解决您的问题,但如果不尝试在循环执行之外查询并查看插入是否有效
  • 最好将 ID 存储为字符串,然后在传递给 Discord.py 时将其转换为 int
  • 您不应该添加所有成员。使用on_messageon_member_join 添加它们。这意味着您可以为自我机器人或忘记不和谐的人使用更少的存储空间。

标签: sql python-3.x sqlite discord.py


【解决方案1】:

答案:REAL/INTEGER 不能用作 m.id 的类型,因为它由于没有足够的空间而四舍五入,因此将它们保存为 TEXT 解决了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2023-02-17
    • 2019-04-30
    • 2017-01-24
    • 2021-09-01
    • 2019-01-03
    相关资源
    最近更新 更多