J'ai créé une base de données appelée websites2014
et trois tables cand_elec
, sites
, et pages
sous cette base de données via Postgresql. J'essaie maintenant d'interroger la table pages
et filtre par l'une de ses colonnes uuid
mais cela ne fonctionne pas. Voici le code:SQLAlchemy requête/filtre ne fonctionne pas
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import inspect
db_string = "postgres://usr:[email protected]:5432/websites2014"
db = create_engine(db_string)
Session = sessionmaker(db)
session = Session()
pages = session.query('pages')
Les codes ci-dessus travail bien jusqu'à ce que la ligne suivante:
test = pages.filter_by(uuid="1234").first()
Il ne fonctionne pas si je change le code:
test = pages.filter_by("uuid"="1234").first()
Je suis nouveau à Postgresql et SQLAlchemy. Quelqu'un peut-il aider? Merci!
EDIT 1
Voici les nouveaux codes I RÉVISÉE:
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import inspect
db_string = "postgres://usr:[email protected]:5432/websites2014"
db = create_engine(db_string)
Session = sessionmaker(db)
session = Session()
Base = declarative_base()
class Page(Base):
__tablename__ = 'polls_question'
uuid = Column(String, primary_key=True)
pages = session.query(Page)
test = pages.filter_by(uuid=1234).first()
Cependant, il me donne un message d'erreur: InternalError: (psycopg2.InternalError) current transaction is aborted, commands ignored until end of transaction block [SQL: 'SELECT polls_question.uuid AS polls_question_uuid \nFROM polls_question \nWHERE polls_question.uuid = %(uuid_1)s \n LIMIT %(param_1)s'] [parameters: {'uuid_1': 1234, 'param_1': 1}]
Si je change la dernière ligne : session.execute("""SELECT * from page WHERE uuid = '1234'""").first()
Il montre un autre message d'erreur comme: InternalError: (psycopg2.InternalError) current transaction is aborted, commands ignored until end of transaction block [SQL: "SELECT * from page WHERE uuid = '1234'"]
Merci encore pour l'aide!
EDIT 2
Comme les commentaires ci-dessous la réponse, si je réécris les codes comme:
class Pages(Base):
__tablename__ = 'pages'
uuid = Column(String, primary_key=True)
donc la classe nom et le nom de table sont définis comme je définis lors de la création table. Cela devrait fonctionner et le message d'erreur disparaîtra.
Merci pour la réponse! Cependant, je suis encore un peu confus. D'après vos codes, il me semble que même si j'ai déjà créé la table et les colonnes à l'intérieur, je dois encore les définir dans mes codes? Btw, la dernière ligne 'test = pages.filter_by (uuid =" 1234 "). First()' ne fonctionne toujours pas et j'ai mis le message d'erreur dans mon message d'origine. – tzu
@Tzu désolé pour le nom de table, c'est '__tablename__ = 'page'' bien sûr – PRMoureu
pourriez-vous vérifier le type de' uuid' dans votre base de données? Entier ou chaîne? – PRMoureu