Python 使用.first()方法没有结果
尝试基于.first()方法处理查询结果时出错,而.all()方法返回预期值Python 使用.first()方法没有结果,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,尝试基于.first()方法处理查询结果时出错,而.all()方法返回预期值 @app.route('/getAlphabet') def getElement(): abc=["abc","def","ghi"] newTest=Test(idU1=json.dumps(abc)) db.session.add(newTest) db.session.commit() entryString = testSchema.dumps(Test.query.w
@app.route('/getAlphabet')
def getElement():
abc=["abc","def","ghi"]
newTest=Test(idU1=json.dumps(abc))
db.session.add(newTest)
db.session.commit()
entryString = testSchema.dumps(Test.query.with_entities(Test.idU1).filter_by(idm=1).first())
return entryString
在浏览器中查看的结果是[{}],而.all()生成预期的结果[{“idU1”:“[\“abc\”、\“def\”、\“ghi\”]“}]
有人有过同样的问题吗
设置数据库的我的代码:
app = Flask(__name__)
app.config["DEBUG"] = True
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
username="Ehrismann",
password="abcdefgh",
hostname="Ehrismann.mysql.pythonanywhere-services.com",
databasename="Ehrismann$default",
)
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI # connection specs
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299 # don't care
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app) # actually make connection
ma = Marshmallow(app) # instantiate MarshmallowObject
class Test(db.Model): # new Table: comment
__tablename__ = "test"
idm = db.Column(db.Integer, primary_key=True) # new Column
idU1=db.Column(db.String(100), nullable=False)
class TestSchema(ma.ModelSchema):
class Meta:
model=Test
testSchema = TestSchema(many=True)
模式设置为many=True,这意味着marshmallow需要一个测试模型列表。当您使用
.first()
sqlalchemy时,将返回一个不在列表中的单一测试模型。Marshamlow在无法正确序列化某些内容时的预期行为是给您一个空对象。这就是为什么你最终得到了[{}]
谢谢,没想到能那么容易地解决这个问题。