IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Problème avec IN sous sqlalchemy et sqlite


Sujet :

SQLite

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec IN sous sqlalchemy et sqlite
    Bonsoir à tous.

    J'ai un petit problème ces temps-ci, suite à une requête dans ma base SQLITE, qui comprend un petit IN.
    Je ne l'ai remarqué que récemment, parce que sous Windows aucune erreur n'apparaît.
    Cependant, sous Linux, je semble avoir un problème dû à une limitation du nombre d'arguments dans ma requête.

    J'ai essayé directement via le module sqlite3 de python, sans retrouver cette limitation.
    J'ai également regardé le paquet source pour sqlite3 (la librairie, pas le binding) et la limite pour un SQL Statement semble être d'un milliard de caractères (cependant, je ne suis pas sûr que ce soit avec ces options que mon paquet a été compilé).

    Je pense donc à un problème dans sqlalchemy, mais j'avoue nager un peu... vu que sous Windows il fonctionne comme attendu...

    Python est en version 2.5.4, sqlalchemy en 0.5.6.1, que ce soit sous Windows ou Debian.
    Si quelqu'un avait une piste, je serais bien preneur !!!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Closed due to an error. This is the full error report:Traceback (most recent call last):
      File "/home/guillaume/workspace/src/Mix.py", line 390, in proceed
        self.connector.put_ashiato()
      File "/home/guillaume/workspace/src/Connector.py", line 617, in put_ashiato
        self.filter_db()
      File "/home/guillaume/workspace/src/Connector.py", line 584, in filter_db
        n = query.count()
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/orm/query.py", line 1552, in count
        should_nest = should_nest[0]
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/orm/query.py", line 1583, in _col_aggregate
        return self.session.scalar(s, params=self._params, mapper=self._mapper_zero())
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/orm/session.py", line 760, in scalar
        return self.execute(clause, params=params, mapper=mapper, **kw).scalar()
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/orm/session.py", line 755, in execute
        clause, params or {})
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/engine/base.py", line 824, in execute
        return Connection.executors[c](self, object, multiparams, params)
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/engine/base.py", line 874, in _execute_clauseelement
        return self.__execute_context(context)
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/engine/base.py", line 896, in __execute_context
        self._cursor_execute(context.cursor, context.statement, context.parameters[0], context=context)
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/engine/base.py", line 950, in _cursor_execute
        self._handle_dbapi_exception(e, statement, parameters, cursor, context)
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/engine/base.py", line 931, in _handle_dbapi_exception
        raise exc.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect)
    OperationalError: (OperationalError) too many SQL variables u'SELECT count(1) AS count_1 \nFROM users \nWHERE users.link IN (?, ?, ?,...),[ 418660, 4462754,...]

  2. #2
    Invité
    Invité(e)
    Par défaut
    J'ai eu le temps de faire quelques tests, histoire de verifier deux ou trois hypotheses...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> from sqlalchemy.ext.sqlsoup import SqlSoup
    >>> db=SqlSoup(r'sqlite:///d:\workspace\src\databases\template.sqlite')
    >>> vals = map(str,range(100000))
    >>> query=db.users.query().filter(db.users.link.in_(vals))
    >>> query.count()
    0
    Le plus probant reste celui-ci.
    Sous Windows, j'arrive bien et bien a faire des requetes avec 100.000 termes dans ma clause IN.
    Sous ma Debian Squeeze, je plafonne a 500, en obtenant le message d'erreur que j'avais dans mon premier message.
    Apres verification sur un poste MacOs, il s'avere que ca marche aussi.

    Donc au choix :
    - sqlalchemy a un probleme sous linux, mais je ne pense pas
    - le module sqlite tel qu'il est package dans ma debian a un probleme (a ete construit a partir d'une version de sqlite avec une limite affreusement basse pour SQL_STATEMENT ? Pour l'instant je n'ai parcouru que le paquet source pour sqlite3, sans rien trouver de bizarre dedans...)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bon, ça vient au minimum de pysqlite
    Quelqu'un aurait une distribution linux autre que Debian sous la main pour me dire si le test ci-dessous échoue également ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    from pysqlite2 import dbapi2 as sqlite
    connection = sqlite.connect('template.sqlite')
    cursor = connection.cursor()
     
    vals = map(str,range(1000))
    statement = 'SELECT * FROM USERS WHERE LINK IN (%s)' %','.join(['?']*1000)
    cursor.execute(statement,vals)

Discussions similaires

  1. Problème avec un sous-sous formulaire
    Par arthur24 dans le forum Access
    Réponses: 2
    Dernier message: 13/01/2006, 17h50
  2. Problème avec EInOutError sous delphi 2005
    Par Teb dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2005, 12h48
  3. fichier .bat : problèmes avec des sous-répertoires
    Par aymron dans le forum Windows
    Réponses: 4
    Dernier message: 23/06/2005, 10h33
  4. Problème avec glutFullScreen() sous linux...
    Par MaxPayne dans le forum OpenGL
    Réponses: 1
    Dernier message: 29/11/2004, 12h30
  5. Problème avec CopyDir sous D5
    Par Houben Jacques dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 23h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo