【问题标题】:How to get one record with SQLAlchemy?如何使用 SQLAlchemy 获取一条记录?
【发布时间】:2016-06-16 21:42:54
【问题描述】:

我正在尝试使用 flasksqlite 开发 Web api。为了与 db 通信,我使用的是sqlalchemy

在我下面发布的代码中,我创建了一个 GET 方法来将所有数据检索到特定表中到 db 中:

from flask import Flask, g, Response, request, jsonify, abort
from flask_restful import Resource, Api
from sqlalchemy import create_engine
from flask.ext.restless import APIManager
from flask.ext.sqlalchemy import SQLAlchemy
from json import dumps
import sqlite3
import json


app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///climb.db"
db = SQLAlchemy(app)

class falesie(db.Model):
    __tablename__ = 'falesie'
    id = db.Column(db.Integer, primary_key=True)
    regione = db.Column(db.String(20))
    citta = db.Column(db.String(20))
    n_settori = db.Column(db.Integer)
    lat = db.Column(db.Float)
    lon = db.Column(db.Float)

    def __init__(self, regione, citta, n_settori, lat, lon):
      self.regione = regione
      self.citta = citta
      self.n_settori= n_settori
      self.lat = lat
      self.lon = lon

@app.route('/dev', methods = ['GET'])
def get_falesie():
    Falesie = falesie.query.all()
    formatted_falesie = []
    for f in Falesie:
        formatted_falesie.append({
        'id': f.id,
        'regione': f.regione,
        'citta': f.citta,
        'n_settori': f.n_settori,
        'lat': f.lat,
        'lon': f.lon})
    return json.dumps({'Falesie': formatted_falesie}), 200, {'Content-  Type': 'application/json'}


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

我想创建一个GET 方法来检索具有特定值的特定记录,如下例所示:

@app.route('dev/<string:name>')
def get_data(name):

我不知道如何检索单个记录。有什么帮助吗?

【问题讨论】:

  • 查询falesie时要使用哪个字段?它没有字段name
  • 字段名称为示例,字段为citta。
  • 我的回答能解决你的问题吗?

标签: python sqlite flask flask-sqlalchemy


【解决方案1】:

这应该有助于获得falesie 的单个结果:

try:
    user = session.query(falesie).filter(name=name).one()  # filter on name
except MultipleResultsFound, e:
    print e
    # Deal with it
except NoResultFound, e:
    print e
    # Deal with that as well

其中session的获取方式如下:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# an Engine, which the Session will use for connection resources
engine = create_engine('sqlite:///climb.db')

# create a configured "Session" class
Session = sessionmaker(bind=engine)

# create a Session
session = Session()

有关更多详细信息,请参阅SQLAlchemy 文档。

【讨论】:

    【解决方案2】:

    如果您阅读the tutorial,您会发现您可以过滤您的查询。这样的东西应该是你想要的:

    falesie.query().filter_by(id=name).first()
    

    【讨论】:

    • 记住查询不可调用,使用falesie.query.filter_by(id=name).first()
    【解决方案3】:

    问题很古老,但另一种技术可以帮助其他有问题的人。

    def load_user(id):
        falesie.query.get(int(id))
    
    猜你喜欢
    • 2023-03-10
    • 2012-01-25
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多