[Flask] Store Data in a SQLite-Database with Flask
Andreas Dorfner
andreas.dorfner at stud.hs-regensburg.de
Sun Nov 20 11:23:22 EST 2016
Hello everyone,
I'm new to python and flask web development.
I have to realize a data logger using flask. By using another framework
called 'pymodbus', I get some data from
an energy meter and save that data to a variable called 'crv_data' (see
file attached). This part is working so far!
The second part of the project contains the storage of 'crv_data' to a
SQLite-Database. For that, I'm using flask.
For creating a table with five columns, a file 'schema.sql' (also
attached) is included.
If the file 'logger.py' is running, a database is produced with the
desired layout and some data in 'crv_data' is available.
But there is no data included in the database.
I think there is an error in function 'add_entry()' (starting in line 72
of logger.py file), because if I call the function
in the infinite loop (line 103), the program stops running.
Maybe I have to say that I using Beaglebone Black with running Debian on it.
Does anybody have an idea, why the program doesn't work?
Many thanks,
Andreas
---
Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft.
https://www.avast.com/antivirus
-------------- next part --------------
#!/usr/bin/python
#all the imports for pymodbus
import Adafruit_BBIO.UART as UART
import time, serial
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.transaction import ModbusRtuFramer
#all the imports for flask
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, \
abort, render_template, flash
from contextlib import closing
#----------------------------------------------------------------------------------------
#initialization of BBB's UART4 (device tree overlay and UART parameters)
UART.setup("UART4")
client = ModbusClient(method = 'rtu', framer = ModbusRtuFramer, port = '/dev/ttyO4', timeout = 1, baudrate = 19200, stopbits = 1, parity = 'E', bytesize = 8)
#----------------------------------------------------------------------------------------
# configuration for the database
DATABASE = '/root/project/logger.db'
DEBUG = True
SECRET_KEY = 'development key'
#USERNAME = 'admin'
#PASSWORD = 'default'
#----------------------------------------------------------------------------------------
# create my little application
app = Flask(__name__)
app.config.from_object(__name__)
#----------------------------------------------------------------------------------------
#connects to the specific database
def connect_db():
return sqlite3.connect(app.config['DATABASE'])
#----------------------------------------------------------------------------------------
#initializes the database
def init_db():
with closing(connect_db()) as db:
with app.open_resource('schema.sql', mode='r') as f:
db.cursor().executescript(f.read())
db.commit()
#----------------------------------------------------------------------------------------
#open the database before each request
@app.before_request
def before_request():
g.db = connect_db()
#----------------------------------------------------------------------------------------
#shut down the database afterwards
@app.teardown_request
def teardown_request(exception):
db = getattr(g, 'db', None)
if db is not None:
db.close()
#----------------------------------------------------------------------------------------
#This view lets the user add new entries if he is logged in. There is a check
#if the user is logged in as well.
#Update: logged in/out function has been removed
@app.route('/add', methods=['POST'])
def add_entry():
# if not session.get('logged_in'):
# abort(401)
g.db.execute('insert into entries (URMS1, IRMS1, PRMS1, QRMS1, cosqhi1) values (?,?,?,?,?)',
[request.form['rcv_data.register[0]'], request.form['rcv_data.register[1]'], request.form['rcv_data.register[2]'], request_form['rcv_data.register[3]'], request_form['rcv_data.register[4]']])
g.db.commit()
flash('New entry was successfully posted')
# return redirect(url_for('show_entries'))
#---------------------------------------------------------------------------
#create the database
init_db()
#energy meter needs about 15 sec for initialization
time.sleep(20)
#infinite loop
while 1:
val = client.connect()
if not val:
print "Error in Client Connection"
#store data to rcv_data (array[5])
rcv_data = client.read_holding_registers(35, count = 5, unit = 1)
#store the data in the database
add_entry()
#print the stored data to screen
print("Registers are")
for i in range (5): #range (17) to show all the usefull data
print(rcv_data.registers[i])
client.close()
#data is updated every 10s
time.sleep(10)
-------------- next part --------------
drop table if exists entries;
create table entries (
id integer primary key autoincrement,
URMS1 integer not null,
IRMS1 integer not null,
PRMS1 integer not null,
QRMS1 integer not null,
cosphi1 integer not null
);
More information about the Flask
mailing list