【问题标题】:Connecting to a PostgreSql table with flask-sqlalchemy returns no records使用 flask-sqlalchemy 连接到 PostgreSql 表不返回任何记录
【发布时间】:2021-07-02 19:59:11
【问题描述】:

我是 SQLAlchemy 和 PostgreSql 的新手,所以对于新手问题表示歉意。我正在尝试使用烧瓶炼金术连接到远程 PostgreSql 服务器中的表,并读取所有表记录。它不一定是flask-sqlalchemy,但我确实需要读取表记录。

该表有 3 条记录,但当我单步执行代码时,它总是返回为零记录。

我正在使用 python 3.7,Visual Studio 代码和 Windows 10 中的虚拟环境。

我已经查看了几篇文章:

https://flask-sqlalchemy.palletsprojects.com/en/2.x/#

https://stackabuse.com/using-sqlalchemy-with-flask-and-postgresql/

https://realpython.com/flask-by-example-part-2-postgres-sqlalchemy-and-alembic/

https://www.askpython.com/python-modules/flask/flask-postgresql

这是我的 app.py 代码:

import sys, os
from flask import Flask, request, jsonify, make_response, session

# SQL ALCHEMY imports
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://userid:password@server:1234/db_name'
db = SQLAlchemy(app)
migrate = Migrate(app, db)

class DummyTable(db.Model):
    field_id = db.Column(db.Integer, primary_key=True)
    desc = db.Column(db.String(10), nullable=False)

    def __repr__(self):
        return '<Desc %r>' % self.desc

@app.route('/test', methods=["GET"])
def get_records():
    from app import DummyTable
    
    db.create_all()
    dummy_table = DummyTable.query.all()

    results = [
            {
                "field_id": dummy_table.field_id,
                "desc": dummy_table.desc
            } for record in dummy_table]

    return {"results": results}

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

非常感谢任何帮助。谢谢。

【问题讨论】:

  • “结果”的长度始终为0。
  • 我计划移动“DummyTable”类和代码来遍历记录到单独的文件。为简单起见,一切都集中在一处。

标签: python postgresql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

我相信你错过了一个

db.session.commit()

db.create_all() 之后

【讨论】:

  • 谢谢。实际上我最终没有使用 SQLAlchemy
【解决方案2】:

我最终改用 psycopg2

import psycopg2

conn = psycopg2.connect(dbname="blah", user="blah", password="blah", host="some-machine", port="9999")

cur = conn.cursor()
cur.execute("SELECT * FROM private_schema.mytable;")

items = cur.fetchall()

for row in items:
    print("pkey = ", row[0], )
    print("val = ", row[1], "\n")

cur.close()
conn.close()

【讨论】:

    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2020-07-30
    • 2020-09-15
    • 2022-01-24
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多