我已经通过Postgresql在此数据库下创建了一个名为websites2014
的数据库和三个表cand_elec
,sites
和pages
。我现在试图查询表pages
并按其列uuid
之一过滤,但它不起作用。下面是代码:SQLAlchemy查询/过滤器不起作用
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')
上方做工精细的代码,直到下一行:
test = pages.filter_by("uuid"="1234").first()
我:
test = pages.filter_by(uuid="1234").first()
如果我更改代码以它不工作Postgresql和SQLAlchemy的新成员。谁能帮忙?谢谢!
编辑1
下面是我修改后的新代码:
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()
但是,它给了我一个错误消息: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}]
如果我改变最后一行:session.execute("""SELECT * from page WHERE uuid = '1234'""").first()
它显示另一个错误消息:InternalError: (psycopg2.InternalError) current transaction is aborted, commands ignored until end of transaction block [SQL: "SELECT * from page WHERE uuid = '1234'"]
再次感谢您的帮助!
EDIT 2
的答案下面的评论,如果我重写代码为:
class Pages(Base):
__tablename__ = 'pages'
uuid = Column(String, primary_key=True)
所以我创建时所定义的类的名称和表名的定义表。它应该工作,错误信息将消失。
感谢您的回应!但是,我仍然有点困惑。根据你的代码,好像我已经事先创建了表格和列,我仍然需要在代码中再次定义这两个表格。顺便说一句,最后一行'test = pages.filter_by(uuid =“1234”)。first()'仍然不起作用,我把错误信息放在我的原始文章中。 – tzu
@Tzu很抱歉关于表名,它是'__tablename__ ='page''当然是 – PRMoureu
你能检查数据库中'uuid'的类型吗?整数或字符串? – PRMoureu