2017-12-06 13:34 GMT+01:00 Darko Volaric <[email protected]>:
> How it's stored depends on how the messages table is defined (which type
> the message column has been given), which you haven't shown, and whether
> storeMessage quotes the message argument when forming the string. My advice
> is to remove any column type and make sure numbers are not quoted when they
> are inserted into the database.
>
I should have added those also:
CREATE TABLE messages(
messageID INTEGER PRIMARY KEY AUTOINCREMENT,
date TEXT NOT NULL DEFAULT CURRENT_DATE,
time TEXT NOT NULL DEFAULT CURRENT_TIME,
type TEXT NOT NULL,
message NOT NULL
)
As you see message does not have any type.
storeMessage:
proc storeMessage {type message} {
db eval "
INSERT INTO messages
(type, message)
VALUES
(:type, :message)
"
}
I changed it to:
proc storeMessage {type message} {
db eval {
INSERT INTO messages
(type, message)
VALUES
(:type, :message)
}
}
But that does not make a difference.
On Wed, Dec 6, 2017 at 11:09 AM, Cecil Westerhof <[email protected]>
> wrote:
>
> > I have the following tcl script:
> > #!/usr/bin/env tclsh
> >
> > ### Improvements
> > # Get database from conf-file
> >
> >
> > package require sqlite3
> > CREATE TABLE messages(
> messageID INTEGER PRIMARY KEY AUTOINCREMENT,
> date TEXT NOT NULL DEFAULT CURRENT_DATE,
> time TEXT NOT NULL DEFAULT CURRENT_TIME,
> type TEXT NOT NULL,
> message NOT NULL
> )
> >
> > proc getCPUTemp {} {
> > if {1 != [regexp -all -line {^CPU_TEMP: +\+([0-9.]+)°C } [exec
> > sensors] -> temp]} {
> > error {Did not get exactly a single temperature line from
> [exec
> > sensors] output} CREATE TABLE messages(
> messageID INTEGER PRIMARY KEY AUTOINCREMENT,
> date TEXT NOT NULL DEFAULT CURRENT_DATE,
> time TEXT NOT NULL DEFAULT CURRENT_TIME,
> type TEXT NOT NULL,
> message NOT NULL
> )
> > }
> > return ${temp}
> > }
> >
> > proc storeCPUTemp {} {
> > storeMessage cpu-temp [getCPUTemp]
> > }
> >
> > proc storeMessage {type message} {
> > db eval "
> > INSERT INTO messages
> > (type, message)
> > VALUES
> > (:type, :message)
> > "
> > } CREATE TABLE messages(
> messageID INTEGER PRIMARY KEY AUTOINCREMENT,
> date TEXT NOT NULL DEFAULT CURRENT_DATE,
> time TEXT NOT NULL DEFAULT CURRENT_TIME,
> type TEXT NOT NULL,
> message NOT NULL
> )
> >
> > proc storeSwap {} {
> > storeMessage swap-usage [exec swapon --noheadings --show]
> > }
> >
> > if {$argc != 1} {
> > error "Error: ${argv0} DATABASE"
> > }
> > sqlite db [lindex $argv 0]
> > db timeout 10000
> > while {true} {
> > after [expr {1000 * (60 - [clock seconds] % 60)}]
> > set currentMinute [clock format [clock seconds] -format %M]
> > db transaction {
> > storeCPUTemp
> > # At the whole hour we save swap usage
> > if {${currentMinute} == "00"} {
> > storeSwap
> > }
> > }
> > }
> > # Not really necessary because the above loop never ends
> > # But I find this more clear and is robuster against change
> > db close
> >
> > If I enter:
> > SELECT date
> > , message
> > , TYPEOF(message)
> > FROM messages
> > WHERE type = 'cpu-temp'
> > AND date = '2017-12-06'
> >
> > I see that the temperature is saved as text.
> > In the past I had a script like this in Python who would save the
> > temperature as real. What do I need to change to let this script save it
> as
> > real also?
> >
> > --
> > Cecil Westerhof
> > _______________________________________________
> > sqlite-users mailing list
> > [email protected]
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> >
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
--
Cecil Westerhof
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users