[Kexi] Examples/questions re. scripts for greater immediate Kexi applicability

Roderick Drew r.c.drew at zetnet.co.uk
Thu Aug 16 17:00:40 CEST 2007


First of all, many thanks to Jaraslow Staniek and all the Kexi developers for 
all the great work you are all doing on Kexi.  It already has great features, 
runs fast and is stable enough that I have never lost data, and only rarely 
lost changes I have made to forms!

My reason for writing is to discuss maximisation of Kexi's applicability
as it presently stands. Having written a database around it, several 
limitations have inevitably come to light.  I know that these are being 
worked on, but coding and testing are complex and time-consuming, 
and Rome wasn't built in a day!   Importantly, Kexi cannot process real 
numbers running SQL queries within it (see my KDE bug nos 147809), and many 
SQL queries don't work.  Kexi doesn't yet allow manual assignation of real 
numbers (see my KDE bug No.  146818) when reading .csv files, and when .csv 
files contain null cells, data often end up in the wrong table columns!  
So one needs to populate any such .csv files with dummy values that can be 
subsequently removed from within Kexi.  Dummy values also ensure that Kexi 
can correctly and automatically interpret column formats.  A further problem 
is not to do with Kexi but with SQL: one can only seem to issue one query at 
a time, and I need to issue over 50 queries at one click!

Being enthusiastic, but with limited knowledge of programming and SQL, I've 
tried to find a way around all this after reading Kexi support and other 
useful information that has been posted.  The solution that works for me is 
to run an *external* python script that operates on my Kexi database and runs 
all the queries at one click, updating the whole table.  Here's an example of 
what works:

===================
Python Script (filenename.py)
===================
#!/usr/bin/env python
import sys, sqlite3

# Create a connection to the database file "test.kexi":
conn = sqlite3.connect('test.kexi')
conn.isolation_level = None
# Get a Cursor object that operates in the context of Connection conn:
c = conn.cursor()

# Run SQL commands (which conveniently can be "wrapped" within Python)
c.execute("update tablename set column_a = 'some text here' where column_a is 
Null")
c.execute("update tablename set column_p = column_e*column_g")
.
.
c.close()

For this, one needs to have sqlite3.  Note that in doing this, several columns 
of my table are "results columns".  I therefore combine data and results in 
one table.  I'd probably be shot by a died-in-the-wool SQL expert, but hell, 
it works perfectly for me for the mo and for the relatively small databases I 
have.  Actually I would prefer to put the results in a separate results table, 
but so far haven't worked out an SQL command that also works in the above 
Python script to do this!  For example, c.execute("update table2 set 
table2.column_a = 3*table1.column_c") won't work.

I have two more python scripts, one which populates a Kexi table with dummy 
variables where there are nulls.  This table can then be exported from Kexi 
as a .csv file.  I can then edit, add columns etc., and then read the .csv 
file back into Kexi.  Semicolons are the best separator, and I edit out all 
the commas in kwrite or kate prior to reading back into Kexi.  Having read 
the .csv file back into Kexi, the second external python script removes all 
the dummy variables from what is now the Kexi table.  It all works fine, 
though it would be much handier to run such scripts *within* Kexi. The 
example in Simple_Database.kexi shows commands like:

import krosskexidb, krosskexiapp, os, codecs, sqlite3, sys
keximainwindow = krosskexiapp.get("KexiAppMainWindow")
connection = keximainwindow.getConnection()
table = connection.tableSchema("orders")
query = table.query()
cursor = connection.executeQuerySchema(query)

but I do not have (and don't yet know where to acquire) a clear understanding 
of Kross, what some of these commands do, nor how to be able to run those 
c.execute("...") commands.  A welcome alternative would be a simple Kexi 
script to run my external python scripts.  One would then simply 
compress the database to immediately see all the updates.

I find here is a great advantage to writing out/reading in tables as .csv 
files. Not only can they easily be read into spreadsheets any time, but 
tables can be easily modified and read back into Kexi with all data 
preserved.  Changing a table column heading within any SQL client results in 
*all* table data being lost.

Even the absence of reports (which I know Adam Pigg is currently working on - 
good luck there!) can be circumvented for now.  Kexi is superb for creating 
forms, which can be used to present data (e.g. as a delivery note or invoice).  
By doing a screen copy of the form area (using PrtScn key in KDE) one can 
select just the form area and save it, for example, as a .jpg file.  One 
problem is that if one then uses another PC with a smaller screen there's no 
way to somehow zoom out to see the whole form (as one can in "edit mode")!  
So that's another facility that could be very useful, and help to make Kexi 
more applicable right now.

Cheers,
Rod



More information about the Kexi mailing list