2016-03-03 3 views
0

Я пытаюсь разработать веб-api, используя flask и sqlite. Для связи с db я использую sqlalchemy.Как получить одну запись с SQLAlchemy?

В коде, который я пост ниже у меня есть создать метод GET для получения всех данных в конкретные таблицы в БД:

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): 

Я не знаю, как получить одну запись. Любая помощь, пожалуйста?

+1

В каком поле вы хотите использовать при запросе 'falesie'? У него нет поля 'name'. – Forge

+0

Имя поля - пример, поле - citta. –

+0

Отвечает ли мой ответ на вашу проблему? –

ответ

4

Если вы читаете the tutorial, вы увидите, что вы можете отфильтровать запрос. Что-то, как это должно быть то, что вы хотите:

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

Это должно помочь вам получить только один результат 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 документация.

Смежные вопросы