【问题标题】:Client SQL in Python and crontabPython 和 crontab 中的客户端 SQL
【发布时间】:2018-12-03 03:19:36
【问题描述】:

我有一些 Python 脚本,由 Raspbian 上的 crontab 执行。 我在本地网络中使用 MySQLdb 库进行请求。

如果我直接通过 Python-IDLE 或在控制台中启动它们,所有脚本都可以正常工作。 但是如果是cron启动的,只执行“INSERT”请求的可以工作,而执行“SELECT”请求的就不行。

我还没有找到明确的解决方案,但是似乎crontab并没有执行与用户相同的SQL客户端配置。 也许我必须在所有请求之前更改路径? (寻找“./my.cnf”?

使用库 MySQLdb 和 PyMySQL 测试

#! /usr/bin/python
# -*- coding: utf-8 -*-

# importations  
import os
import time
import sys
import pymysql as sql  # or MySQLdb as...
from os import path as os_path

#-----------------------------------------------------------------#
#  constants : use your own values / utilisez vos propres valeurs #
#-----------------------------------------------------------------#
PATH_THERM = "/home/pi/Documents/" #path to this script
DB_SERVER ='192.168.0.59'       # MySQL : IP server 
DB_USER='user'                    # MySQL : user
DB_PWD='password'              # MySQL : password
DB_BASE='capteurs'              # MySQL : database name

def log(texte):
    datation = time.strftime('%d-%m-%Y %H:%M:%S')

    logue = open('log_test.txt','a')
    txt = "\n" + datation + "\t" + texte
    txt = txt.encode('utf-8')
    logue.write(txt)
    logue.close()

def query_temp():
    datebuff = time.strftime('%d-%m-%Y')

    db = sql.connect(DB_SERVER, DB_USER, DB_PWD, DB_BASE)
    cursor = db.cursor()
    cursor.execute("""SELECT sonde2,date FROM `PiTemp` ORDER BY date DESC LIMIT 0, 1""")
    rows = cursor.fetchall()
    print datebuff, u" : Dernière température de l'eau :", rows[0][0], u"°C"
    log(u"lecture température SQL - ok")

    a = rows[0][0]
    b =  rows[0][1]
    return (a, b)


#----------------------------------------------------------#
#             principal code                               #
#----------------------------------------------------------#

PATH=os_path.abspath(os_path.split(__file__)[0])
os.chdir(PATH)
log('start')
log(PATH)
txt = str(query_temp()[0])
log(txt)

crontab:

*/1 * * * * python /home/pi/Documents/180623_test.py

【问题讨论】:

  • 在 Jessie 和 Stretch、Rapsberry Pi 2 和 3B+ 上测试,用“sudo python...”测试,用 crontab 测试,例如:*/1 * * * * cd /home/pi/Documents / && python "180623_test_SQL.py" 两个都不行
  • 请定义 * 不起作用*,您是以“您”身份运行 cron 还是以其他用户身份运行?
  • `PiTemp` ? ...允许吗?
  • 不管作为服务启动都不起作用...
  • 用用户测试:“pi”,用“sudo”测试

标签: python sql cron mysql-python pymysql


【解决方案1】:

发现失败的原因,cron 传递的打印与控制台的编码/解码不同(!??)。

... print (u"Alerte, tous à poil !") UnicodeEncodeDecode 错误!

奇怪,看起来 cron 的编码/解码方式与用户不同....(!?)

解决了打印中没有拉丁字符,或者打印通过 try/except...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2020-05-05
    • 2018-09-07
    相关资源
    最近更新 更多