Person.query.filter(Person.id == 1).first()
def row2dict(row):
d = {}
for column in row.__table__.columns:
d[column.name] = str(getattr(row, column.name))
return d
row2dict = lambda r: {c.name: str(getattr(r, c.name)) for c in r.__table__.columns}
# sqlalchemy 通过映射类对表能很容易进行增删改查Person.query.filter(Person.id == 1).first()# 查询的结果是一个ResultProxy对象,可以通过.获取到对应的值,但是怎么转成python字典呢def row2dict(row): d = {} for column in row.__table__.columns: d[column.name] = str(getattr(row, column.name))
class ModelBase(object):
def __init__(self):
self.fields = [x.key for x in self.__mapper__.attrs]
def __iter__(self):
return next(self)
def __next__(self):
for key in self.fields:
value = getattr(s
mysql = "mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(mysql_user, mysql_password, mysql_host, mysql_port,
mysql_database)
# 创建对象的...
在这个list中包含着许多 tuple,
他们看似是tuple,实则并不是
而是一个特殊的类型"<class ‘sqlalchemy.util._collections.result’>"
这是一个 AbstractKeyedTuple 对象
它拥有一个 keys(
ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上
但是由谁来做这个转换呢?所以ORM框架应运而生。
在Python中,最有名的ORM框架是SQLAlchemy。
当时用sqlalchemy时,查询到的是一个对象,而不是列表。解决方法。
一.查询单条数据。
model
from sqlalchemy import Column, String, Int...
在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操作ORM对象更为方便,毕竟不用管数据库session的状态了。
假设数据库里有一张post表,其中一种方法就是
p = session.query(Post).first()
p.__dict__
但由于p是sqlAlchemy的对象,所以p.__dict__中会有一些其他的属性比如_sa_instance这种我们不需要关注的
那么我们可以给model的基类加一个方法,假设models.py中原来是这样
Base = sqlalchemy.ext.decla
def model_to_dict(result):
from collections import Iterable
# 转换完成后,删除 '_sa_instance_state' 特殊属性
from db_manager import TTDModel
from sqlalchemy.util._collections import AbstractKeyedTuple
# Abs...
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
age = db.Column(db.Integer)
@app.route('/')
def index():
users = User.query.all()
user_list = []
for user in users:
user_dict = {'id': user.id, 'name': user.name, 'age': user.age}
user_list.append(user_dict)
return {'users': user_list}
if __name__ == '__main__':
app.run()
这个例子中,我们定义了一个 User 模型,然后在路由函数中查询所有的用户数据,并将其转换为列表嵌套字典的形式返回。