我开始创建一个烧瓶应用程序,因为我需要对最近传输到本地postgresql数据库的一些数据进行一些可视化。
我有很多表(33),它们都具有与当前仅用作不同类型数据的容器相同类型的内容(它们包含在每个表中不同的JSON对象)。
这些表名为“Table_#”(其中#表示已定义的数字子集中的数字)。
我创建了以下模型:
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中获取一些数据。
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中,我有以下内容:
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)
但由于某种原因,当我尝试打印我的行时,没有输出。
我希望有人知道为什么会这样?
答案 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