Выбор данных с помощью psycopg2 из таблицы на основе схемы в PostgreSQL - PullRequest
0 голосов
/ 28 апреля 2019

Я новичок в python, и я создал скрипт для выбора данных из таблицы на основе схемы в postgreSQL.

Но всякий раз, когда я запускаю скрипт, получаю сообщение об ошибке ниже.какие-либо предложения по этому поводу?

**Error while fetching data from PostgreSQL relation "public.sample" does not exist**

Ниже приведен скрипт, который я использую, в этом коде я сталкиваюсь со следующими проблемами.1. Невозможно выбрать из таблицы, которая находится внутри схемы (как упомянуто выше) 2. В скрипте есть часть для создания таблицы, даже если она работает, таблица TABLE не создается в базе данных.3.Также будет очень полезно, если кто-нибудь поможет мне создать HTML-страницу, используя Jinja2 (в настоящее время значения данных поступают), внутри HTML-скрипта, но есть сомнения относительно того, как это сделать для нескольких пользователей).

import psycopg2
import jinja2
from collections import namedtuple

TEMPLATE="""
     <!DOCTYPE html>
       <html><head><title>Jinja Template Example</title>
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" media="screen">
       <style type="text/css">
       .container {max-width: 500px;padding-top: 100px;}</style></head>
       <body>
        <div class="container">
         <p>My string: {{my_string}}</p>
         <p>Value from the list:</p>
         <p>Loop through the list:</p>
         <ul>
           {% for row in rows %}
           <p style="line-height: 14px; text-align: center; font-size: 12px; margin: 0;"> {{ row.column1 }}</p><br>
           {% endfor %}
         </ul>
        </div>
          <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
          <script src="http://netdna.bootstrapcdn.com/bootstr
          ap/3.0.0/js/bootstrap.min.js"></script>
          </body>
      </html>
      """

def dB_Fetch():
 try:
   connection = psycopg2.connect(user="postgres",
                                  password="postgres",
                                  host="127.0.0.1",
                                  port="5432",
                                  database="postgres")
   cursor = connection.cursor()
   print("Connection established")
   cursor.execute("select version()")
   version = cursor.fetchone()[0]
   print(version)
   cursor.execute("DROP TABLE IF EXISTS cars")
   cursor.execute("CREATE TABLE cars(id SERIAL PRIMARY KEY, name VARCHAR(255), price INT)")
   cursor.execute("INSERT INTO cars(name, price) VALUES('Audi', 52642)")
   cursor.execute("INSERT INTO cars(name, price) VALUES('Mercedes', 57127)")
   cursor.execute("INSERT INTO cars(name, price) VALUES('Skoda', 9000)")
   cursor.execute("INSERT INTO cars(name, price) VALUES('Volvo', 29000)")
   cursor.execute("INSERT INTO cars(name, price) VALUES('Bentley', 350000)")
   cursor.execute("INSERT INTO cars(name, price) VALUES('Volkswagen', 21600)")
   print("Table created")

   postgreSQL_select_Query = "select * from public.Sample"
   cursor.execute(postgreSQL_select_Query)
   print("Selecting rows from test table using cursor.fetchall")
   a = list();
   print("Print each row and it's columns values")


   env = jinja2.Environment()
   template = env.from_string(TEMPLATE)
   cursor.execute("SELECT Name FROM public.Sample;")

   row_tuple = namedtuple("Row", [col[0] for col in cursor.description])
   result = template.render(rows=[row_tuple(row) for row in cursor.fetchall()])
   print (TEMPLATE)
   print (result) 

 except (Exception, psycopg2.Error) as error:
     print ("Error while fetching data from PostgreSQL", error)
 finally:
     if(connection):
         cursor.close()
         connection.close()
         print("PostgreSQL connection is closed")

if __name__ == '__main__':
    dB_Fetch()

1 Ответ

0 голосов
/ 28 апреля 2019

Проблема с именем схемы и таблицы.

public. Образец не существует в вашей базе данных.Пожалуйста, проверьте точное имя схемы и таблицы, также вы можете попробовать без схемы, чтобы она автоматически указывала на общую схему.

...