programing

웹 페이지의 일련 번호를 기준으로 SQL을 데이터로 채우는 Python

abcjava 2023. 7. 30. 16:47
반응형

웹 페이지의 일련 번호를 기준으로 SQL을 데이터로 채우는 Python

파이썬 스크립트에서 다음 형식의 데이터베이스를 생성해야 합니다. 이미 데이터를 생성했지만 잘못된 형식으로 생성했기 때문에 로컬 호스트 웹 페이지에서 작업하려면 코드와 SQL을 수정해야 합니다.

데이터는 라즈베리 PI 및 1와이어 온도 센서 설정에서 얻은 것입니다.

현재 3개의 센서가 있으며, 각각 고유한 일련 번호를 가지고 있으며, 일련 번호는 데이터베이스 아래에 표시되어 있으며, 3개의 센서는 POND, FILTER, 앰비언트입니다.

    var myData = "date  Pond    Filter  Ambient\n\
2019-04-01 01:29:04 13.400  22.700  32.200\n\
2019-04-01 02:29:04 18.000  29.900  37.700\n\
2019-04-01 03:29:04 13.300  29.100  39.400\n\
2019-04-01 04:29:04 15.700  28.800  38.000\n\
2019-04-01 05:29:04 14.200  28.700  32.400\n\
2019-04-01 06:29:04 18.800  27.000  37.000\n\
2019-04-01 07:29:04 17.900  26.700  32.300\n\
2019-04-01 08:29:04 11.800  26.800  38.900\n\
2019-04-01 09:29:04 19.300  26.700  38.800\n\
2019-04-01 10:29:04 11.200  20.100  38.700\n\
2019-04-01 11:29:04 18.700  21.100  30.300\n\
2019-04-01 12:29:04 11.800  21.500  35.300\n\
2019-04-01 13:29:04 13.000  24.300  36.600\n\
2019-04-01 14:29:04 16.900  27.100  36.600\n\
2019-04-01 15:29:04 11.700  24.600  38.000\n";

각 센서마다 고유한 ID가 있으며 쉽게 이해할 수 있도록 이름을 지정해야 합니다.

28-0417c45ae5ff   =   Pond
28-0417c459f5ff   =   Filter
28-0517c48e7cff   =   Ambient

현재 Python 스크립트가 데이터를 sql 데이터베이스로 보내고 있지만 새 웹 페이지의 형식이 잘못되어 데이터를 올바르게 기록하려면 python과 sql을 변경해야 합니다.

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

import os
import fnmatch
import time
import MySQLdb as mdb
import logging

logging.basicConfig(filename='/home/pi/Sensor_error.log',
  level=logging.DEBUG,
  format='%(asctime)s %(levelname)s %(name)s %(message)s')
logger=logging.getLogger(__name__)

# Load the modules (not required if they are loaded at boot) 
# os.system('modprobe w1-gpio')
# os.system('modprobe w1-therm')

# Function for storing readings into MySQL
def insertDB(IDs, temperature):

  try:

    con = mdb.connect('localhost',
                      'temp_insert',
                      'Insert',
                      'measurements');
    cursor = con.curssql = "INSERT INTO temperature(temperature, sensor_id)\
      VALUES ('%s', '%s')" % \
      ( temperature[i], IDs[i])
      cursor.execute(sql)
      sql = []
      con.commit()

    con.close()

  except mdb.Error, e:
    logger.error(e)

# Get readings from sensors and store them in MySQL

temperature = []
IDs = []

for filename in os.listdir("/sys/bus/w1/devices"):
  if fnmatch.fnmatch(filename, '28-*'):
    with open("/sys/bus/w1/devices/" + filename + "/w1_slave") as f_obj:
      lines = f_obj.readlines()
      if lines[0].find("YES"):
        pok = lines[1].find('=')
        temperature.append(float(lines[1][pok+1:pok+6])/1000)
        IDs.append(filename)
      else:
        logger.error("Error reading sensor with ID: %s" % (filename))

if (len(temperature)>0):
  insertDB(IDs, temperature)

가능하면 센서 일련 번호를 이름으로 변환해야 합니다. 도움을 주시면 감사하겠습니다. 이 단계에 도달하는 데 몇 주가 걸렸습니다.

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

import os
import fnmatch
import time
import MySQLdb as mdb
import logging

logging.basicConfig(filename='/home/pi/Sensor_error.log',level=logging.DEBUG,
                format='%(asctime)s %(levelname)s %(name)s %(message)s')
logger=logging.getLogger(__name__)

# Load the modules (not required if they are loaded at boot) 
# os.system('modprobe w1-gpio')
# os.system('modprobe w1-therm')

# Function for storing readings into MySQL
def insertDB(IDs, temperature):

try:

    con = mdb.connect('localhost',
                  'temp_insert',
                  'Insert',
                  'measurements');
    cursor = con.curssql = "INSERT INTO temperature(temperature, sensor_id)\
           VALUES ('%s', '%s')" % \
            ( temperature[i], IDs[i])
    cursor.execute(sql)
    sql = []
    con.commit()

    con.close()

except mdb.Error, e:
    logger.error(e)

# Get readings from sensors and store them in MySQL

temperature = []
IDs = []
sensor_switch = {'28-0417c45ae5ff':'Pond', '28-0417c459f5ff':'Filter',
               '28-0517c48e7cff':'Ambient'} # a dictionary of ids

for filename in os.listdir("/sys/bus/w1/devices"):
    if fnmatch.fnmatch(filename, '28-*'):
        with open("/sys/bus/w1/devices/" + filename + "/w1_slave") as f_obj:
            lines = f_obj.readlines()
            if lines[0].find("YES"):
                pok = lines[1].find('=')
                temperature.append(float(lines[1][pok+1:pok+6])/1000)
                IDs.append(sensor_switch.get(str(filename),'key_mismatch')) 
                # use a dictionary's get method to switch content
                # filename = '28-0417c45ae5ff' is switched to 'pond'
            else:
                logger.error("Error reading sensor with ID: %s" % (filename))

if (len(temperature)>0):
    insertDB(IDs, temperature)

언급URL : https://stackoverflow.com/questions/55471723/python-to-populate-sql-with-data-based-on-serial-number-on-web-page

반응형