From: duncan at rcp.co.uk (Duncan Booth)
Date: 20 Apr 1999 08:42:59 GMT
Subject: Date/Time conversions
References: <371BEBA7.5DBC1B0F@qut.edu.au>
Message-ID: <8DAE62F4Dduncanrcpcouk@news.rmplc.co.uk>
Content-Length: 1783
X-UID: 782                                                  

Rico Albanese <r.albanese at qut.edu.au> wrote in 
<371BEBA7.5DBC1B0F at qut.edu.au>:

>I am writing a web based database application and I am having problems
>in creating a string that contains an integer in it.   I wish to store
>the login time as an integer so that I may do some time difference
>calculations based  on the stored login time (ie. the integer).  The SQL
>statement string creation fails when I have the integer variable
>"logtime" in it but not when it is removed.  I believe that my problem
>is caused by trying to insert an integer into a string.  The database
>works fine (ie I can add integers to the column "LogTime").
>
>
Your problem is that you are trying to concatenate a string with an 
integer. The arguments to the '+' operator should both be numbers, or both 
strings, you cannot mix strings and numbers here.

There are two obvious solutions. One is to convert logtime to a string. 
e.g.
thesql=thesql + frontpar + str(logtime) + ","

The other, possibly better one is to build up your SQL string using the '%' 
operator. For example, your SQL statement may be build up something like 
this:

SQLtemplate = '''INSERT INTO CSJobs.compjobs
(LogTime,Caller,Phone_Extension,Caller_Category,Location,Job_Description,Jo
b_Priority,LogNumb,Log_Date,Finished)
VALUES (%(logtime)s, '%(Caller)s', '%(Ph)s', '%(Sch)s', '%(Loc)s', 
'%(JbDes)s', '%(JbPr)s', '%(LogN)s', '%(logdate)s', 'n')
''' 
thesql = SQLtemplate % locals()
crsr.execute(thesql)

Which does all the neccessary conversions to strings as you go.


-- 
Duncan Booth                                    duncan at dales.rmplc.co.uk
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?
http://dales.rmplc.co.uk/Duncan




