strftime存在问题(Python)

5

我尝试将数据发送到Mosquitto Broker并将此同一数据添加到SQLite中。

以下是我的脚本:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sqlite3
import logging

class Photos:
    def __init__(self):
            #Connection a la basse de donnees sqlite3
            self.db = sqlite3.connect('/home/pi/FlowerPower.db')
            #Preparation d'un objet cursor qui va executer les futures requetes SQL sur la base de donnees
            self.cursor = self.db.cursor()

            logging.basicConfig(filename='subscribeFP.log',level=logging.DEBUG, format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')

    def traitement(self, msg, numSonde):
            try:
                    #Convertit le message poste par le publisher de byte a string
                    queryArgs = str(msg.payload)
                    #Variable nom de la sonde
                    nomSonde = str(numSonde[2])
                    #Prepare la requete SQL pour la table photo
                    queryText = "INSERT INTO photos(sonde, date, photos) VALUES (?, ?, ?)", (nomSonde, strftime('%%d-%%m-%%Y %%H:%%%M:%%S','now','localtime'), queryArgs)
                    #Execute la requete SQL sur la BDD
                    self.cursor.execute(str(queryText))
                    #Commit pour etre sur que la requete SQL est effectuee
                    self.db.commit()
                    #Code d'exception
            except sqlite3.Error as e:
                    self.logging.error('Erreur Sqlite3: ' + str(e))
                    #Retour en arrière si il y a une erreur (proprietes ACID)
                    self.db.rollback()

当我使用 mosquitto_pub 发送数据时,出现了以下错误:
  File "/usr/lib/python3/dist-packages/mosquitto.py", line 720, in loop
rc = self.loop_read(max_packets)
 File "/usr/lib/python3/dist-packages/mosquitto.py", line 961, in loop_read
   rc = self._packet_read()
 File "/usr/lib/python3/dist-packages/mosquitto.py", line 1360, in _packet_read
   rc = self._packet_handle()
 File "/usr/lib/python3/dist-packages/mosquitto.py", line 1775, in _packet_handle
     return self._handle_publish()
  File "/usr/lib/python3/dist-packages/mosquitto.py", line 1888, in _handle_publish
    self.on_message(self, self._userdata, message)
  File "insertionBdd.py", line 37, in on_message
photos.traitement(msg, numSonde)
  File "/home/pi/photosFP.py", line 22, in traitement
    queryText = "INSERT INTO photos(sonde, date, photos) VALUES (?, ?, ?)", (nomSonde, strftime('%%d-%%m-%%Y %%H:%%%M:%%S','now','localtime'), queryArgs)
 NameError: global name 'strftime' is not defined

我不明白为什么出现了这个错误,我已经尝试添加了 "from datetime importe datetime" 代码,但我的另一个脚本中使用的 strftime 却没有这个问题...请问有人可以帮助我吗?

1个回答

11

正如信息所述,您尚未定义strftime,您只定义了datetime

strftime是datetime对象的一个方法。但是,您似乎正在将其作为独立函数调用,并传递一些字符串:这根本不是它的工作方式。我不确定您想要做什么,但看起来您想要获取当前时间并对其进行格式化。因此,您需要实际调用相关的方法:

datetime.now().strftime('%d-%m-%Y %H:%M:%S')

我也不确定你的代码中 'localtime' 是做什么的,以及为什么要将百分号重复两遍。


1
谷歌搜索引擎将我带到了这个已回答的问题,我相信你的答案可能是我需要的。但我无法弄清楚我必须导入哪个模块才能使用你的代码行。你能告诉我吗? - Brandon
3
正如提问者在问题中所提到的,from datetime import datetime - Daniel Roseman
1
我尝试了一下,但出现了 ImportError: 无法导入名称 'datetime' 的错误。 - Brandon
2
你的本地目录中有一个名为 "datetime.py" 的文件,请将其重命名。如有其他问题,请提出新的问题。 - Daniel Roseman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接