如何使用Flask和SQLAlchemy从python中的postgresql读取数据?

时间:2016-12-05 09:51:00

标签: python postgresql flask flask-sqlalchemy

我开始创建一个烧瓶应用程序,因为我需要对最近传输到本地postgresql数据库的一些数据进行一些可视化。

我有很多表(33),它们都具有与当前仅用作不同类型数据的容器相同类型的内容(它们包含在每个表中不同的JSON对象)。

这些表名为“Table_#”(其中#表示已定义的数字子集中的数字)。

models.py

我创建了以下模型:

from sqlalchemy import BigInteger, Column, JSON, Text
from app import db

class Table_1(db.Model):
    __tablename__ = 'table_1'

    id = db.Column(BigInteger, primary_key=True)
    did = db.Column(Text)
    timestamp = db.Column(BigInteger)
    data = db.Column(JSON)
    db_timestamp = db.Column(BigInteger)

    def __repr__(self):
        return '<1_Data %r>' % (self.did)

测试我是否可以从postgresql中获取一些数据。

__初始化__。PY

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)

from app import views, models

config.py

在我的config.py中,我有以下内容:

SQLALCHEMY_DATABASE_URI = "postgresql://<username>:<password>@localhost:5432/backupdata" //Ofc <username> and <password> isn't my credentials..

在我的终端(Windows cmd)中,我尝试过运行以下内容:

>python
>>>from app import db, models
>>>row = models.Table_1.query.get(1)

但由于某种原因,当我尝试打印我的行时,没有输出。

我希望有人知道为什么会这样?

3 个答案:

答案 0 :(得分:1)

我稍微更新了我的模型,看到我确实有一个特定的行。

from sqlalchemy import BigInteger, Column, JSON, Text
from app import db

class Table_1(db.Model):
    __tablename__ = 'table_1'

    id = db.Column(BigInteger, primary_key=True)
    did = db.Column(Text)
    timestamp = db.Column(BigInteger)
    data = db.Column(JSON)
    db_timestamp = db.Column(BigInteger)

    def __repr__(self):
        return '<1_Data %r, %r>' % (self.did, self.id)

然后以下查询让我意识到实际上通过我的烧瓶应用程序与SQLAlchemy建立了有效连接。

row = models.Table_910.query.filter_by(did='357139052424715').first()

知道我有一个上面的项目,我可以得到一个项目:

<1_Data '357139052424715', 738390911>

答案 1 :(得分:0)

如您的回答所述,您需要使用firts()方法。另一种选择是按如下方式限制查询:

Table.query.limit(1).all()

这样您就不需要过滤器,只需检索查询中的第一项(这似乎是您最初使用query.get(1)

创建的内容

有关详细信息,请参阅here

答案 2 :(得分:0)

这种选择是在没有SQLAlchemy的情况下使用postgres和Flask

@app.route('/contextget', methods=['GET']) 
def contextget():
    sql_query ="""SELECT * FROM context"""
    out = cur.execute(sql_query)
    context_records = cur.fetchall() 
    ContextRootKeys = []
    outp ="Print each row and it's columns values"
    for row in context_records:
        ContextRootKeys.append(row[1])
    conn.commit()
    print(ContextRootKeys)
    return outp