Я работаю над своим проектом с использованием PostgreSQL.Я хочу использовать запрос get с «параметрами» и «заголовками запросов».
Parameter = "gridname" запросы-заголовок = "ownerid"
Вот мой код, который я использую с платформой Python Tornado.Для создания таблицы я использую SQLAlchemy, а для извлечения данных из PostgreSQL использую Raw SQL.
db_string = "postgres://user:PWD@**.**.**.***:####/db_demo"
Base = declarative_base()
db = create_engine(db_string)
class DBFetch(RequestHandler):
def get(self, gridname):
ownerid_var = self.request.headers["ownerid"]
Session = sessionmaker(bind=db)
session = Session()
Base.metadata.create_all(db)
result = []
record = db.execute("SELECT name, columndata, gridname, ownerid, issystem, ispublic, isactive, createdby, createdat, modifiedat, modifiedby
FROM col.layout WHERE (ispublic=1 OR (ispublic=0 AND ownerid=?)) AND (gridname=? AND isactive=1)", (ownerid_var,gridname))
for row in record:
result.append(row)
result_json = json.dumps(result)
self.write(result_json)
self.finish()
session.close()
def make_app():
urls = [("/webcustomization/layouts/(.*)", DBFetch)]
return Application(urls)
if __name__ == '__main__':
app = make_app()
app.listen(3000)
IOLoop.instance().start()
Но я запускаю свой код на Postman и вставляю ввод для заголовка запроса (ownerid) = 3, затемошибка ниже:
(psycopg2.errors.UndefinedFunction) operator does not exist: character varying =?
LINE 1: ... (ispublic=0 AND ownerid::varchar=?)) AND (...
^
HINT: No operator matches the given name and argument type. You might need to add an explicit type cast.
[SQL: SELECT name, columndata, gridname, ownerid, issystem, ispublic, isactive, createdby, createdat, modifiedat, modifiedby FROM col.layout WHERE (ispublic=1 OR (ispublic=0 AND ownerid::varchar=?)) AND (gridname=? AND isactive=1)]
[parameters: ('3', 'RT')]
(Background on this error at: http://sqlalche.me/e/f405)
Что мне нужно сделать, чтобы получить данные?Пожалуйста, предложите