是否有一种简单的方法来迭代列名和值对?
我的sqlalchemy版本是0.5.6
下面是我尝试使用dict(row)的示例代码,但它抛出异常,TypeError:'User'对象不可迭代
import sqlalchemy
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
print "sqlalchemy version:",sqlalchemy.__version__
engine = create_engine('sqlite:///:memory:', echo=False)
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
metadata.create_all(engine)
class User(declarative_base()):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
def __init__(self, name):
self.name = name
Session = sessionmaker(bind=engine)
session = Session()
user1 = User("anurag")
session.add(user1)
session.commit()
# uncommenting next line throws exception 'TypeError: 'User' object is not iterable'
#print …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Flask/Python中jsonify一个SQLAlchemy结果集.
Flask邮件列表建议采用以下方法:http://librelist.com/browser//flask/2011/2/16/jsonify-sqlalchemy-pagination-collection-result/#04a0754b63387f87e59dda564bde426e:
return jsonify(json_list = qryresult)
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
TypeError: <flaskext.sqlalchemy.BaseQuery object at 0x102c2df90>
is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
我在这里俯瞰什么?
我发现了这个问题:如何将SqlAlchemy结果序列化为JSON?这看起来非常相似但是我不知道Flask是否有一些魔力使其更容易,如邮件列表帖子所示.
编辑:为了澄清,这就是我的模型
class Rating(db.Model):
__tablename__ = 'rating'
id = db.Column(db.Integer, primary_key=True)
fullurl = db.Column(db.String())
url = db.Column(db.String())
comments = db.Column(db.Text)
overall = db.Column(db.Integer)
shipping = db.Column(db.Integer)
cost = db.Column(db.Integer)
honesty = db.Column(db.Integer)
communication = db.Column(db.Integer)
name = db.Column(db.String())
ipaddr = db.Column(db.String())
date = db.Column(db.String())
def __init__(self, fullurl, url, comments, overall, shipping, cost, honesty, communication, name, ipaddr, date): …Run Code Online (Sandbox Code Playgroud) 我正在使用Flask构建一个网站,我从中大量使用jsonify方法将字典转换为Json.
问题是现在我也经常使用Decimals,不幸的是jsonify无法处理Decimal:
jsonify({'a': Decimal('1')})
Run Code Online (Sandbox Code Playgroud)
导致:
=== (a long stacktrace preceding this) ===
File "/usr/local/lib/python2.7/dist-packages/flask/json.py", line 83, in default
return _json.JSONEncoder.default(self, o)
File "/usr/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: Decimal('1') is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
所以我想用这样的方法包装jsonify:
def myOwnJsonify(item):
if isinstance(item, Decimal):
return flask.jsonify(str(item))
else:
return flask.jsonify(item)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会转换位于字典或列表中的十进制数.
如何将python数据结构中的所有十进制数字(无论是列表,字典,元组等)转换为字符串,以便我可以安全地将数据结构转换为json?
我正在尝试序列化到__dict__一个对象的JSON ,它正常工作,直到我将对象追加到我的第一个对象的一个实例属性:
from json import dumps
class A(object):
def __init__(self):
self.b_list = []
class B(object):
def __init__(self):
self.x = 'X'
self.y = 'Y'
def __repr__(self):
return dumps(self.__dict__)
a = A()
print dumps(a.__dict__) # works fine
a.b_list.append(B())
print dumps(a.__dict__)
Run Code Online (Sandbox Code Playgroud)
第二次打电话时dumps,我得到以下信息TypeError:
TypeError: {"y": "Y", "x": "X"} is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我一直得到这个错误,而我不明白为什么这不能序列化为JSON.
我是rest用 Flask写的flask-marshmallow
模型.py
class Application(db.Model):
__tablename__ = 'applications'
id = db.Column(db.String(), primary_key=True)
name = db.Column(db.String())
versions = db.relationship('Version', backref='application', lazy=True)
def __repr__(self):
return '<application {}>'.format(self.name)
class Version(db.Model):
__tablename__ = 'versions'
id = db.Column(db.String(), primary_key=True)
file = db.Column(db.String(80), nullable=True)
application_id = db.Column(db.Integer, db.ForeignKey('applications.id'))
Run Code Online (Sandbox Code Playgroud)
谢马斯.py
class ApplicationDetailSchema(ma.Schema):
class Meta:
fields = ('id', 'name', 'versions')
Run Code Online (Sandbox Code Playgroud)
路线.py
@bp.route("/<id>")
def application_detail(id):
application = Application.query.get(id)
result = application_detail_schema.dump(application)
return jsonify(result)
Run Code Online (Sandbox Code Playgroud)
类型错误:“版本”类型的对象不可 JSON 序列化
我有一堂这样的课:
class VoteEnum(enum.Enum):
like = "LIKE"
dislike = "DISLIKE"
abstain = "ABSTAIN"
Run Code Online (Sandbox Code Playgroud)
我有一个数据库来存储这些选票:
class MyVotes(db.Model):
__tablename__ = "my_votes"
id = db.Column(db.String, primary_key=True, default=lambda: str(uuid4()))
item = db.Column(db.String, nullable=False),
vote = db.Column(db.Enum(VoteEnum))
def __str__(self):
return json.dumps({
"id":self.id,
"item":self.item,
# I want to print the value of vote?
)}
Run Code Online (Sandbox Code Playgroud)
从 sqlalchemy (在 Flask 中)检索值并打印时,出现以下错误:
类型错误:MyVotes 类型的对象不可 JSON 序列化
也许有办法调用我的 sqlalchemy 请求?也许是类方法?我很感谢人们可以提供的任何帮助。
我是MySQL新手,知道如何使用mysqldump实用程序备份数据库.但是,我认为它没有安装在pythonanywhere上.我很感激有关如何备份我在pythonanywhere上创建的mysql数据库的任何建议.
谢谢.
Django 有一个方便的manage.py命令dumpdata ,可以配置为将整个数据库转储为JSON.
目前我仅限于使用sqlalchemy并且我想做同样的事情:
将连接字符串作为输入'mysql+pymysql://user:pwd@localhost:3306/',并获取数据库的内容JSON(我不需要 Django 提供的所有元信息,但我不介意)。
我发现这个问题详细说明了如何将 SQLAlchemy 对象转储到 JSON,这来自 sqlalchemy 文档,概述了如何从数据库获取所有表名:
meta = MetaData()
input_db = f'sqlite:///tmpsqlite'
engine = create_engine(input_db)
meta.reflect(bind=engine)
print(meta.tables)
Run Code Online (Sandbox Code Playgroud)
如何检索这些表的所有内容,然后将它们转换为JSON?sqlalchemy是否有类似于 django 的 dumpdata 功能的内置命令?
我正在尝试查询模型。
例如模型名称称为“Demo”,我想获取表的所有记录。
class Demo(db.Model):
__tablename__ = "demo"
field_1 = db.Column(db.String(255), nullable=False)
field_2 = db.Column(db.String(255), nullable=False)
Run Code Online (Sandbox Code Playgroud)
现在我正在查询
records = Messages.query.all()
Run Code Online (Sandbox Code Playgroud)
我正在尝试发送记录作为响应,所以我面临这个错误。我是烧瓶新手,请帮我解决一下。
我正在使用 Flask SQLAlchemy 并且我有以下代码可以使用来自 MySQL 数据库的原始 SQL 查询从数据库中获取用户:
connection = engine.raw_connection()
cursor = connection.cursor()
cursor.execute("SELECT * from User where id=0")
results = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)
results变量是一个元组,我希望它是 dict() 类型。有没有办法实现这一目标?
当我使用 pymysql 构建数据库连接时,我能够做到
cursor = connection.cursor(pymysql.cursors.DictCursor)
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy 中是否有类似的东西?
注意:我想要做这个改变的原因是为了摆脱在我的代码中使用 pymysql,而只使用 SQLAlcehmy 功能,即我不想在我的代码中的任何地方使用 ´´´import pymysql´´´。
我正在编写小查询以从mysql数据库中获取数据,我有一个报告表,在里面我有report_id,我需要查询匹配report_id来自apiparams的数据。
我的功能:
def view_single_thumbnail(idx): // idx coming from params
session = Session()
result = session.query(
Report
).filter(
Report.report_id == idx
).all()
return jsonify({
'data': result
})
Run Code Online (Sandbox Code Playgroud)
投掷错误:'components.db.core.table_declaration.Report object at 0x000001C1Fsdfsdf51E6A90' is not JSON serializable。