반응형
웹 페이지의 일련 번호를 기준으로 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
반응형
'programing' 카테고리의 다른 글
속성 x가 없는 요소와 일치하는 css 선택기 (0) | 2023.07.30 |
---|---|
C# 대소문자를 구분하지 않는 동등 연산자가 있습니까? (0) | 2023.07.30 |
SQL의 하위 쿼리에 대한 TAB를 언제 추가해야 합니까? (0) | 2023.07.30 |
부트스트랩의 "col-md-4", "col-xs-1", "col-lg-2"에 있는 숫자의 의미 (0) | 2023.07.30 |
powershell에서 마침표 '.' 연산자는 무엇을 합니까? (0) | 2023.07.30 |