2016-03-03 132 views
0

我正在尝试使用flasksqlite开发web api。为了与db沟通,我使用了sqlalchemy如何用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): 

我不知道如何检索单个记录。请帮忙吗?

+1

查询'falesie'时,您想使用哪个字段?它没有字段“名称”。 – 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文档。

相关问题