如何将 message.text 转换为字符串并将其保存到数据库如何通过电报机器人下载照片 TelegramBotAPI

问题描述

我想保存照片并将文件名和消息文本添加数据库中。(也在这数据库我有请求和用户的状态,如何发出请求,这 2 列工作正常)

数据库

CREATE TABLE main (
    id     STRING,owner  STRING,status STRING,photo  STRING
);

完整代码

import telebot as tl
import sqlite3

conn = sqlite3.connect("D:/Promo_Bot/codes.db",check_same_thread=False)
cur = conn.cursor()
bot = tl.TeleBot("1875698946:AAGKlLTNEjaJQAz4VOj4Pc3Jej3A1tj-WjY")

@bot.message_handler(commands=['start'])
def start(message):
    bot.reply_to(message,"Привет")

@bot.message_handler(content_types=['photo'])
def photo(message):
    bot.reply_to(message,"Запрос отправлен на модерацию")
    link = message.text
    with open(link,"wb") as save_file:
        save_file.write(bot.download_file(bot.get_file(message.photo[0].file_id).file_path))
        data = [(message.text,str(message.from_user.username),'wait',link)]
    cur.executemany("""INSERT INTO main
                VALUES (?,?,?)""",data)
    conn.commit()
@bot.message_handler()
def no(message):
    bot.reply_to(message,"Отправте номер на чеке и фото одним сообщение")


bot.polling()

问题: 我的程序将 None 保存到第 1 列,将 None.jfif 保存到第 4 列。 SQLite Studio Screenshot

谢谢

解决方法

您正在 message.text 函数内将 photo 写入数据库。但是,该函数仅针对包含 photo 的消息触发。当 message 包含照片时,message.text is None。照片可能有的任何标题都将在 message.caption 中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...