token=uuid.uuid4().bytes.encode("base64")
expires=datetime.now()+timedelta(days=1)
print token
print expires
con = sqlite3.connect(dbpath,detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.cursor()
cur.execute(
    "INSERT INTO token VALUES ('%s', ?)" % 
      (token,expires))
a=cur.fetchone()
con.commit()
con.close() 

Tabla
CREAR TABLA de token (token varchar(255),FECHA de vencimiento);

Error
TypeError: no todos los argumentos convertidos en el formato de cadena

Esto ha sido contestado ya stackoverflow.com/questions/1829872/…

OriginalEl autor Abdul Kader | 2011-04-17

2 Comentarios

  1. 9

    Nunca use % operador con SQL – puede conducir a la inyección de SQL. Revisión de su execute declaración como esta:

    cur.execute("INSERT INTO token VALUES (?, ?)", (token,expires))

    Realidad hay otro problema: no se puede usar cur.fetchone() después de INSERT.

    Ejemplo completo:

    $ sqlite3 test.db
    sqlite> create table token (token text primary key, expires text);
    
    $ python
    >>> import sqlite3
    >>> from datetime import datetime, timedelta
    >>> from uuid import uuid4
    >>> token = uuid4().bytes.encode("base64")
    >>> expires = datetime.now() + timedelta(days=1)
    >>> conn = sqlite3.connect("test.db")
    >>> cur = conn.cursor()
    >>> cur.execute("INSERT INTO token VALUES (?, ?)", (token, expires))
    <sqlite3.Cursor object at 0x7fdb18c70660>
    >>> cur.execute("SELECT * FROM token")
    <sqlite3.Cursor object at 0x7fdb18c70660>
    >>> cur.fetchone()
    (u'9SVqLgL8ShWcCzCvzw+2nA==\n', u'2011-04-18 15:36:45.079025')
    obteniendo el mismo error. estoy usando sqlite3
    … lo que está documentado en más detalle en esta página: docs.python.org/release/2.6/library/sqlite3.html
    me pueden persistir en la base de datos si puedo usar marcador de posición %s en sqlite3. Pero, ¿será datetime.datetime cuando puedo recuperar
    Kader he añadido sesión de ejemplo para sqlite3 y python. Y no se puede recuperar el objeto datetime parte posterior de la base de datos SQLite sin analizar porque no hay ningún tipo datetime en SQLite y objeto datetime serán almacenados como texto.
    Yo actully almacena como un objeto unicode. Quiero que se guarde como un datetime.objeto datetime. Puedes echar un vistazo aquí stackoverflow.com/questions/4272908/…

    OriginalEl autor hdima

  2. 1

    El error se habla por sí mismo.

    La cadena de interpolación falla porque se pasa dos parámetros a la cadena INSERT
    pero no es sólo un marcador de posición %s. ¿Qué quieres con ‘?’ aquí.

    Tal vez que la hormiga

    cur.execute(‘INSERT….’, token, caduca)

    ??

    Quiero persistir el objeto datetime.. Que de marcador de posición que debo usar para que me viene como objeto datetime no como cadena
    Tómese su tiempo y lea docs.python.org/library/sqlite3.html

    OriginalEl autor Andreas Jung

Dejar respuesta

Please enter your comment!
Please enter your name here