Python Flask - wyświetlenie rekordów dodanych do bazy danych

0

Stworzyłem program dodający rekordy do bazy danych postgres, używając flaska oraz podobno metody GET potrzebuję wyświetlić wyniki(rekordy). Używając flaska umiem jedynie wyświetlić zdania typu "Hello word". Proszę o wskazówki jak mogę podejść do tego problemu

0

używając flaska oraz podobno, (wytłuszczenie moje :-)) metody GET

Ha, ha, ha; ale na poważnie, pokaż kod, co tam urzeźbiłeś?

0

Nie bardzo rozumiem gdzie jest problem.

@app.route('/costam', methods=['GET'])
def records():
    return load_stuff_from_db()
1

To jest takie pytanie w stylu "jak wysłać człowieka na księżyc?". Poszukaj sobie tutoriala jak się połączyć z bazą PSQL w Pythonie. Z tego co pamiętam to tam zwykle jest zwracana lista krotek czy coś, łatwo to zmapować na dicty, a z tym Flask już powinen sobie sam poradzić.

0

@lion137:

"from flask import Flask, redirect, url_for, request
import psycopg2
from config import config
  

#dodać tutaj flaska "GET"
#wyświtlenie hello word
#zapytanie ma uzupełniać tabelę 
#wszystko w osobnych branch
app = Flask(__name__)

#@app.route("/")
#def index():
 #   return "Hello word"

#if __name__ == "__main__":
 #   app.run(debug = True)

@app.route("/database", methods=["GET", "POST"])
def connect():
    return
    connection = None
    try:
        params = config()
        print('Connecting to the postgreSQL database ...')
        connection = psycopg2.connect(**params)

        # create a cursor
        crsr = connection.cursor()
        print('PostgreSQL database version: ')
        crsr.execute('SELECT version()')

        ts = open("table_series.sql", "r")
        tc = open("table_cardata.sql", "r")
        fs = open("fill_series.sql", "r")
        fc = open("fill_cardata.sql", "r")

        sql_command = ts.read()
        crsr.execute(sql_command)

        sql_command = tc.read()
        crsr.execute(sql_command)
        
        sql_command = fs.read()
        crsr.execute(sql_command)

        sql_command = fc.read()
        crsr.execute(sql_command)


        connection.commit()
                


        db_version = crsr.fetchone()
        print(db_version)
        crsr.close()
    except(Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if connection is not None:
            connection.close()
            print('Database connection terminated.')


if __name__ == "__main__":
    app.run(debug=True)
    
0

Jest taki moduł — sqlalchemy. A nawet specjalnie do pracy z Flask — flask_sqlalchemy. Z jego pomocą możesz podłączyć się do bazy danych i wykonywać różne polecenia. Na przykład, otrzymać wszystkie dane z bazy (SELECT * FROM db_name;) i potem zwrócić wynik w formacie json:

response = flask.jsonify({ 'status': True, 'data': data })
response.status_code = 200
return response
0

@LibrarlaN: Dzięki, sprawdzę sobie ten moduł

0

@Shalom: Dostaję błąd przy tym:
"load_stuff_from_db"

0

@Shalom: Uprzedzę odpowiedź - ImportError: No module named mojkodzik :D

0

Gdy używam tego kodu do stworzenia tabel i dodania rekordów jest wszystko okey, ale gdy używam go do wyświetlania tych danych jest taki problem:
"TypeError: The view function for 'connect' did not return a valid response. The function either returned None or ended without a return statement."
Nie wiem dlaczego tak się dzieje, czy to oznacza, że nie mogę tak pobrać danych bo connect nie zwraca prawidłowych wartości?

import psycopg2
from config import config
from flask import Flask, render_template, request
  


app = Flask(__name__)

@app.route('/', methods=['GET'])
def connect():
    connection = None
    try:
        params = config()
        connection = psycopg2.connect(**params)

        # create a cursor
        crsr = connection.cursor()
   

        crsr.execute("SELECT * FROM db;")
        data = crsr.fetchall()
        crsr.close()

        return print(data)
    except:
        pass

                
if __name__ == "__main__":
    app.run(debug=True)

1

@Python_fanboy:

W twoim przykładzie, "connect()" zwraca funkcję "print" (a dokładniej odpowiedź tej funkcji) jako odpowiedź serwera. Używaj zamiast tego, coś podobnego:

return 'text'

P.S. Także możesz zrobić, żeby użytkownik otrzymywał html-stronę:

return render_template('index.html', variable='text')

lub json-obiekt:

return jsonify({ 'key': 'data' })

1 użytkowników online, w tym zalogowanych: 0, gości: 1