Sqlalchemy中的一些小知识
数据类型转换
db.session.query(Vehicle).filter(cast(Vehicle.id, db.Integer)==0)
sqlalchemy返回的数据进行构造json
def to_json(model):
""" Returns a JSON representation of an SQLAlchemy-backed object. """
json = {}
# json['fields'] = {}# json['pk'] = getattr(model, 'id')
for col in model._sa_class_manager.mapper.mapped_table.columns:
# json['fields'][col.name] = getattr(model, col.name)
json[col.name] = getattr(model, col.name)
# return dumps([json])
return json
def to_json_list(model_list):
json_list = []
for model in model_list:
json_list.append(to_json(model))
return json_list
def message(record):
if record:
return to_json(record), 200
return {"message": "not exit"}, 400
def get(self, id):
record = Usr.query.filter_by(id=id).first()
return to_json_list(record.phone.first().phone)
[转自]http://www.cnblogs.com/marvinzns/p/4718689.html
sqlalchemy中同时访问多个数据库
sqlalchemy在使用过程中也会有需要同时访问多个数据的情况,默认我们只绑定了一个数据库,当需要绑定多个数据库的时候,需要增加以下配置
SQLALCHEMY_BINDS = {
'db_obj': 'mysql://%s:%s@%s/%s' % (db_config.mysql_config['user'], db_config.mysql_config[
'passwd'], db_config.mysql_config['host'], 'db_name'),
}
在编写model的时候也需要进行指定绑定的sqlalchemy对象,但是需要是访问默认的table就不需要指定
class Table_obj(db.Model):
__bind_key__ = 'db_obj'
__tablename__ = 'table_name'
sqlalchemy中使用关联关系
在多对多,或者一对多的场景中,可以减少定义一张关联关系表和自己写sql做关联,可以直接用sqlalchemy的关联对象做定义
sqlRelate = db.Table('table_name_1',
db.Column('table_name_1_id', db.Integer,db.ForeignKey('table_name_1.id') ),
db.Column('table_name_2_id', db.String(100),db.ForeignKey('table_name_2.id')))
class Table_name_1(db.Model):
__tablename__ = 'table_name_1'
id = db.Column(db.Integer, primary_key=True)
rels = db.relationship('Table_name_2', secondary=sqlRelate, backref=db.backref('table_name_1_relate_talbe_name_2'))
class Table_name_2(db.Model):
__tablename__ = 'table_name_2'
id = db.Column(db.Integer, primary_key=True)