Używam ręcznie spreparowanego SQL do pobierania danych z bazy danych PG, używając SqlAlchemy. Próbuję kwerendy SQL, która zawiera jak operator „%” i że wydaje się rzucać SqlAlcjhemy przez pętlę:Dziwny komunikat o błędzie SQLAlchemy: TypeError: obiekt "dict" nie obsługuje indeksowania
sql = """
SELECT DISTINCT u.name from user u
INNER JOIN city c ON u.city_id = c.id
WHERE c.designation=upper('fantasy')
AND c.id IN (select id from ref_geog where short_name LIKE '%opt')
"""
# The last line in the above statement throws the error mentioned in the title.
# However if the last line is change to:
# AND c.id IN (select id from ref_geog where short_name = 'helloopt')
# the script runs correctly.
#
# I also tried double escaping the '%' i.e. using '%%' instead - that generated the same error as previously.
connectDb()
res = executeSql(sql)
print res
closeDbConnection()
Każdy wie, co jest przyczyną tego mylący komunikat o błędzie i jak mogę to naprawić?
[[Edit]]
Zanim ktoś pyta, nie ma nic szczególnego lub fantazyjne o funkcjach zawarte powyżej. Na przykład funkcja executeSql() po prostu wywołuje conn.execute (sql) i zwraca wyniki. Zmienna conn jest po prostu wcześniej ustanowionym połączeniem z bazą danych.
Czy możesz wysłać kod 'executeSql (...)'? A także, czy naprawdę masz 'RETURNING *' w wyrażeniu 'SELECT'? – van
@van Tęskniłem za tym. W SQL, który jest przyczyną problemu, nie ma "POWROTU *". Poprawię pytanie. –
czy ta odpowiedź [http://stackoverflow.com/questions/3944276/psycopg2-using-wildcard-causes-typeerror] jest pomocna? – van