-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dennis Benzinger wrote:
> [EMAIL PROTECTED] wrote:
>> Is it possible to use this for sending triggers to a sqlite db?Could
>> someone provide me with an example of how to do this please?
>> Thanks
> 
> Do you want to implement a trigger for a SQLite database in Python?
> 
> That won't work. Triggers in SQLite can only contain UPDATE, INSERT, 
> DELETE and SELECT statements http://sqlite.org/lang_createtrigger.html>.

Yes, but you can fake it.

You can create a new SQL function using pysqlite's create_function, and
then just call that function in the trigger. In that Python function from
the trigger, you can then even access SQLite again.

I've attached a quick-and-dirty example.

Note that exceptions in functions get ignored currently, so you better
implement a try-except with some kind of logging during development,
otherwise you will wonder why nothing happens.

Also, older pysqlite releases won't provide useful error messages if you
have errors in the SQL you send to executescript(). Using a recent pysqlite
release is recommended if you plan to use executescript().

- -- Gerhard
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEgMQrdIO4ozGCH14RArFaAKCU8lgwidMoNQ0GGKVwJ2GV9xPF8ACfTDhv
QVHvudLfoDGiIyFgHe5w6L4=
=bfUa
-----END PGP SIGNATURE-----
from pysqlite2 import dbapi2 as sqlite

def duplicate(col1, col2):
    cur = con.cursor()
    cur.execute("insert into test2(col1, col2) values (?, ?)", (col1, col2))

con = sqlite.connect(":memory:")
con.create_function("duplicate", 2, duplicate)
cur = con.cursor()
cur.executescript("""
    create table test(col1, col2);
    create table test2(col1, col2);

    create trigger my_trigger after insert on test for each statement
    begin
        select duplicate(new.col1, new.col2);
    end;
    """)

cur.executemany("insert into test(col1, col2) values (?, ?)", [(x, x+1) for x in range(5, 8)])
con.commit()
cur.execute("select col1, col2 from test2")
print cur.fetchall()
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to