Pysqlite storing file as blob example

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • rustyhowell@gmail.com

    #1

    Pysqlite storing file as blob example

    I'm trying to store binary data in a sqlite database and call into the
    db using pysqlite 3.
    What I've got so far is this:

    import sqlite
    con = sqlite.connect( DB_PATH)
    cur = con.cursor()
    query = """create table t1(
    ID INTEGER PRIMARY KEY,
    data BLOB );"""
    cur.execute(que ry)
    con.commit()
    b = buffer('/path/to/binary/file')
    query = 'insert into table (ID,data) values (1,?);'
    result = cur.execute(que ry,(b))
    con.commit()

    The error message I get is :
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python2.5/site-packages/sqlite/main.py", line 255, in
    execute
    self.rs = self.con.db.exe cute(SQL % parms)
    TypeError: not all arguments converted during string formatting

    I also read about using adapters, but I haven't found any clear info
    on how to use them.
    Does anyone have an example of storing binary data (image) in sqlite
    using pysqlite?

  • Carsten Haese

    #2
    Re: Pysqlite storing file as blob example

    On Tue, 2007-07-31 at 00:25 +0000, rustyhowell@gma il.com wrote:
    I'm trying to store binary data in a sqlite database and call into the
    db using pysqlite 3.
    What I've got so far is this:
    >
    import sqlite
    con = sqlite.connect( DB_PATH)
    cur = con.cursor()mea n
    query = """create table t1(
    ID INTEGER PRIMARY KEY,
    data BLOB );"""
    cur.execute(que ry)
    con.commit()
    b = buffer('/path/to/binary/file')
    query = 'insert into table (ID,data) values (1,?);'
    result = cur.execute(que ry,(b))
    The second argument to execute() must be a sequence of parameter values.
    You have one parameter value, the string b. To make a one-tuple, you
    need a comma, as in "(b,)".
    con.commit()
    >
    The error message I get is :
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python2.5/site-packages/sqlite/main.py", line 255, in
    execute
    self.rs = self.con.db.exe cute(SQL % parms)
    This traceback line worries me. I'm almost certain that you're not using
    the latest version of the sqlite module. The module that is included
    with Python2.5 is called sqlite3, and it lives
    in .../python/site-packages/sqlite3/*
    and .../python/lib-dynload/_sqlite3.so.

    HTH,

    --
    Carsten Haese



    Comment

    • 7stud

      #3
      Re: Pysqlite storing file as blob example

      On Jul 30, 6:25 pm, rustyhow...@gma il.com wrote:
      I'm trying to store binary data in a sqlite database and call into the
      db using pysqlite 3.
      What I've got so far is this:
      >
      import sqlite
      con = sqlite.connect( DB_PATH)
      cur = con.cursor()
      query = """create table t1(
      ID INTEGER PRIMARY KEY,
      data BLOB );"""
      cur.execute(que ry)
      con.commit()
      b = buffer('/path/to/binary/file')
      buffer() ?
      >From the docs:
      ----
      There are several built-in functions that are no longer essential to
      learn, know or use in modern Python programming. They have been kept
      here to maintain backwards compatibility with programs written for
      older versions of Python.
      ....
      buffer(object[, offset[, size]])
      ----

      Comment

      • Carsten Haese

        #4
        Re: Pysqlite storing file as blob example

        On Tue, 2007-07-31 at 00:13 -0700, 7stud wrote:
        On Jul 30, 6:25 pm, rustyhow...@gma il.com wrote:
        I'm trying to store binary data in a sqlite database and call into the
        db using pysqlite 3.
        What I've got so far is this:

        import sqlite
        con = sqlite.connect( DB_PATH)
        cur = con.cursor()
        query = """create table t1(
        ID INTEGER PRIMARY KEY,
        data BLOB );"""
        cur.execute(que ry)
        con.commit()
        b = buffer('/path/to/binary/file')
        >
        buffer() ?
        Using buffer is not in itself wrong, as some DB-API modules, including
        sqlite3, do use buffer objects to encapsulate binary data. However, the
        encapsulation should be called in a portable way by using the standard
        Binary factory function: b = sqlite3.Binary( contents).

        What is wrong, though, is passing the filename into it instead of the
        contents. This is in addition to the wrong execute call and using the
        wrong version of the sqlite module, as I pointed out in my previous
        reply.

        --
        Carsten Haese



        Comment

        Working...