如何使用Flask和SQLAlchemy从python的postgresql读取数据?
问题描述:
我开始创建一个烧瓶应用程序,因为我将需要对最近传输到本地postgresql数据库的一些数据进行一些可视化。我有很多表(33),它们都具有与当前相同类型的内容,只是作为不同类型数据的容器(它们包含的JSON对象在每个表中都不相同)。如何使用Flask和SQLAlchemy从python的postgresql读取数据?
这些表被命名为“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抓一些数据。
__init__.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..
在我的终端(视窗CMD)我试着运行如下:
>python
>>>from app import db, models
>>>row = models.Table_1.query.get(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>
答
正如你的答案说,你就需要使用firts()
方法。另一种选择是限制你的查询,如下所示:
Table.query.limit(1).all()
这样,你不需要一个过滤器,可以直接检索查询的第一个项目(这似乎是你想要最初做什么与query.get(1)
更多信息,请参见here。
你必须在表中的1? – dirn
主键请问上面的命令得到了行的id的记录做什么?我还以为是像只得到1行..但如果这是行的ID那么这就是我的问题,怎么会我得到了一个“随机”行或随机子行? – Zeliax
['get'执行主键查找](http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query。Query.get)。 – dirn