Re: Trouble writing to database: RSS-reader



Arne a écrit :
Hi!

I try to make a rss-reader in python just for fun, and I'm almost
finished.

Bad news : you're not.

I don't have any syntax-errors, but when i run my program,
nothing happends.

This program is supposed to download a .xml-file, save the contents in
a buffer-file(buffer.txt) and parse the file looking for start-tags.
When it has found a start tag, it asumes that the content (between the
start-tag and the end-tag) is on the same line,

Very hazardous assumption. FWIW, you can more safely assule this will almost never be the case. FWIW, don't assume *anything* wrt/ newlines when it comes to XML - you can even have newlines between two attributes of a same tag...

so then it removes the
start-tag and the end-tag and saves the content and put it into a
database.

The problem is that i cant find the data in the database! If i watch
my program while im running it, i can see that it sucsessfuly
downloads the .xml-file from the web and saves it in the buffer.

But I dont think that i save the data in the correct way, so it would
be nice if someone had some time to help me.

Full code: http://pastebin.com/m56487698
Saving to database: http://pastebin.com/m7ec69e1b
Retrieving from database: http://pastebin.com/m714c3ef8

1/ you don't need to make each and every variable an attribute of the class - only use attributes for what constitute the object state (ie: need to be maintain between different, possibly unrelated method calls). In your update_sql method, for exemple, beside self.connection and _eventually_ self.cursor, you don't need any attribute - local variables are enough.

2/ you don't need these <xxx>Stored variables at all - just reset title/link/description to None *when needed* (cf below), then test these variables against None.

3/ learn to use if/elif properly !-)

4/ *big* logic flaw (and probably the first cause of your problem): on *each* iteration, you reset your <xxx>Stored flags to False - whether you stored something in the database or not. Since you don't expect to have all there data on a single line (another wrong assumption : you might get a whole rss stream as one single big line), I bet you never write anything into the database .

5/ other big flaw : either use an autoincrement for your primary key - and *dont* pass any value for it in your query - or provide (a *unique*) id by yourself.

6/ FWIW, also learn to properly use the DB api - don't build your SQL query using string formatting, but pass the argument as a tuple, IOW:

# bad:
cursor.execute(
'''INSERT INTO main VALUES(null, %s, %s, %s)'''
% title, link, description
)

# good (assuming you're using an autoincrementing key for your id) :
cursor.execute(
"INSERT INTO main VALUES(<X>, <X>, <X>)",
(title, link, description)
)

NB : replace <X> with the appropriate placeholder for your database - cf your db module documentation (usually either '?' or '%s')

This will make the db module properly escape and convert values.

7/ str.replace() doesn't modify the string in-place (Python strings are immutable), but returns a new string. so you want:
line = line.replace('x', 'y')

8/ you don't need to explicitely call connection.commit on each and every statement, and you don't need to call it at all on SELECT statements !-)

9/ have you tried calling print_rss *twice* on the same instance ?-)

10/ are you sure it's useful to open the same 'buffer.txt' file for writing *twice* (once in __init__, the other in update_sql). BTW, use open(), not file().

11/ are you sure you need to use this buffer file at all ?

12/ are you really *sure* you want to *destroy* your table and recreate it each time you call your script ?

And yes, I know that there is rss-parseres already built, but this is
only for learning.

This should not prevent you from learning how to properly parse XML (hint: with an XML parser). XML is *not* a line-oriented format, so you just can't get nowhere trying to parse it this way.



HTH
.



Relevant Pages

  • Re: Pivot Table ASP.NET without webservice?
    ... If you download http://msdn.microsoft.com/msdnmag/issues/03/10/OLAP/, switch ... But this example uses webService to get the meta data of Pivot Table as ... XML file and return back to JavaScript function. ... private String BuildPivotTableMetaDataXML{ ...
    (microsoft.public.office.developer.web.components)
  • Import XML to Access Database
    ... I wish to import XML into my Access 2003 Database. ... Public Function TestXML(strURL as string, strUserId as string, ... Dim varthis As Variant ...
    (comp.databases.ms-access)
  • RE: XML Processing in SQL Server
    ... The xml part has been generated by me from my asp.net application, ... then passed in to the stored procedure in SQL Server. ... Asp.net does not let me build up a string of the following type:- ... >> database. ...
    (microsoft.public.sqlserver.programming)
  • Re: Sql server to xml string with encoding
    ... > I try to read data from a SQL server and convert it to a xml document string ... > to write the correct encoding to the string but it seems that when reading ... > from the database the data i converted from it's original econding to UTF-8. ... > So when i write the xml string the result will be garbled. ...
    (microsoft.public.dotnet.framework.adonet)
  • Re: XML memory stream
    ... > xml in a firehose fashion - i.e forwards only, ... rather than just being a string. ... > essentially an entire database), ... >>I need to load a XML into a string. ...
    (microsoft.public.dotnet.languages.csharp)