我已經通過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