如何让sqlalchemy与mysql一起使用现有数据库

u59ebvdq  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(498)

我在使用sqlalchemy操作mysql中的现有数据库时遇到问题,因为我需要它来构建restfulapi。
我在这里得到了关于循环依赖的有趣错误:

from flask import Flask, request, jsonify, make_response
from flaskext.mysql import MySQL
from flask_sqlalchemy import SQLAlchemy

# from webapi import models

# mysql = MySQL()

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secretkey' #for use later
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:password@127.0.0.1/mydb'

db = SQLAlchemy(app)

class Extensions(db.Model):

    __tablename__ = "Extensions"

    extnbr = db.Column(db.Integer, primary_key=True, default="NULL")
    authname = db.Column(db.String(256), nullable=True, default="@nobody")
    extpriority = db.Column(db.Integer, nullable=True, default=0)
    callaccess = db.Column(db.Integer, nullable=True, default=0)
    extlocation = db.Column(db.String, nullable=True, default="NULL")
    display = db.Column(db.String, nullable=True, default="NULL")

@app.route("/")
def hello():
    return "Welcome to Python Flask App!"

@app.route("/extensions", methods=["GET"])
def get_all_extensions():
    users = Extensions.query.all()

    output = []

    for user in users:
      user_data = {}
      user_data['extnbr'] = user.extnbr
      user_data['authname'] = user.authname
      user_data['extpriority'] = user.extpriority
      user_data['callaccess'] = user.callaccess
      user_data['extlocation'] = user.extlocation
      user_data['display'] = user.display
      output.append({'extensions' : output})

    return jsonify({'users' : output})

if __name__ == "__main__":
    app.run(debug=True)

我得到一个关于循环依赖的错误:
调试和跟踪:
https://dpaste.de/f3ux

kd3sttzy

kd3sttzy1#

这和你的工作有关 output . 你在附加一本包含 outputoutput 它本身,创建了一个时髦的数据结构,导致了json错误。
尝试改变

output.append({'extensions' : output})

对此:

output.append({'extensions' : user_data })

(这是我想你无论如何都想要的)

dzjeubhm

dzjeubhm2#

问题是:

output = []

for user in users:
  ...
  output.append({'extensions' : output})  # here you are adding output to the output

检查此示例:

out = []
for i in range(2):
    out.append({'ext': out})

# output

[{'ext': [...]}, {'ext': [...]}]

你有相同的输出。我肯定这不是你想要的。所以把有问题的行改成这个: output.append({'extensions' : user_data})

相关问题