Найти - Пользователи
Полная версия: Запись в Postgres из CGI скрипта.
Начало » Python для новичков » Запись в Postgres из CGI скрипта.
1
ekssist
Привет всем!

Нужен CGI скрипт который запишет в Postgres параметры передаваемые в URL,
например: http://127.0.0.1/script_cgi-db.py?event=event&calledNumber=calledNumber

По отдельности скрипты работают, а вместе скомпоновать у меня не получается,
подскажите пожалуйста как надо делать что бы этот скрипт заработал.
# Python 3.6.9

 #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import psycopg2
from cgi import parse_qs, escape
import os
### CGI
url = parse_qs(os.environ.get('QUERY_STRING','').encode('utf-8', 'surrogateescape').decode('utf-8'))
event = url.get('event', [''])[0]
calledNumber = url.get('calledNumber', [''])[0]
### PostgreSQL
conn = psycopg2.connect(user='phonecall', password='********', database='phonecall', host='127.0.0.1')
cursor = conn.cursor()
insert_query = """ INSERT INTO phonecall (event, callednumber) VALUES ('event', 'callednumber')"""
cursor.execute(insert_query)
conn.commit()
cursor.close()
conn.close()

При расcкоментировании “import psycopg2” ошибка:
Traceback (most recent call last):: /home/avtt/www/test/account/script_cgi-db.py
File “/home/avtt/www/test/account/script_cgi-db.py”, line 3, in <module>: /home/avtt/www/test/account/script_cgi-db.py
import psycopg2: /home/avtt/www/test/account/script_cgi-db.py
ModuleNotFoundError: No module named ‘psycopg2’: /home/avtt/www/test/account/script_cgi-db.py
End of script output before headers: script_cgi-db.py
Rodegast
pip install psycopg2
ekssist
Rodegast
pip install psycopg2

этого не достаточно?

pip3 install psycopg2
Collecting psycopg2
Installing collected packages: psycopg2
Successfully installed psycopg2-2.9.1

Если из командной строки запустить, то в бд запишется.

 #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import psycopg2
### PostgreSQL
conn = psycopg2.connect(user='phonecall', password='********', database='phonecall', host='127.0.0.1')
cursor = conn.cursor()
insert_query = """ INSERT INTO phonecall (event, callednumber) VALUES ('event', 'callednumber')"""
cursor.execute(insert_query)
conn.commit()
cursor.close()
conn.close()

Если URLом ткнуть, то параметры будут получены

 #!/usr/bin/env python3
# -*- coding: utf-8 -*-
from cgi import parse_qs, escape
import os
### CGI
url = parse_qs(os.environ.get('QUERY_STRING','').encode('utf-8', 'surrogateescape').decode('utf-8'))
event = url.get('event', [''])[0]
calledNumber = url.get('calledNumber', [''])[0]

По отдельности они работают, а вместе не получается.

Rodegast
А ты случайно гадость под названием virtual event не используешь?
ekssist
Rodegast
А ты случайно гадость под названием virtual event не используешь?

Пришлось гуглить, ничего не понял, но уверен что нет.

Такая же фигня происходит и если в скрипте прописать “import asyncpg”,
хотя без CGI работает нормально.
py.user.next
ekssist
  
insert_query = """ INSERT INTO phonecall (event, callednumber) VALUES ('event', 'callednumber')"""
cursor.execute(insert_query)
А ты от этого какую-то магию ждёшь? Для питона и для PostgreSQL-модуля это просто строка. Аргументы передай правильно.
ekssist
py.user.next
А ты от этого какую-то магию ждёшь? Для питона и для PostgreSQL-модуля это просто строка. Аргументы передай правильно.

Просто на время тестирования прописал статику, что бы не отвлекаться, ты ведь знаешь что это не поможет.
Rodegast
> По отдельности они работают, а вместе не получается.

Должно всё работать. Посмотри какие пути прописаны в sys.path и проверь куда установлен psycopg2

py.user.next
ekssist
Просто на время тестирования прописал статику, что бы не отвлекаться, ты ведь знаешь что это не поможет.
Какую статику? Где у тебя аргументы передаются? Ты вообще понимаешь, что их передавать надо?
ekssist
Rodegast
>Должно всё работать. Посмотри какие пути прописаны в sys.path и проверь куда установлен psycopg2

Отправил на почту доступ к серверу по ssh,
скрипты в /home/avtt/scripts/
может взгляните, почему не работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB