Возникают проблемы при использовании составного ключа с SQLite в SQLAlchemy, продолжайте получать ошибки о передаче слишком большого количества параметров - PullRequest
0 голосов
/ 06 ноября 2018

Я работаю над созданием API для серверной части мобильного приложения и немного над головой. База данных хранит информацию о пользователях для пользователей приложения. Я совершенно новичок в python и базах данных, поэтому отладка была немного грубой, но я наконец-то заработал, используя электронную почту пользователя в качестве первичного ключа. К сожалению, я тогда узнал, что мне нужно добавить int в качестве первичного ключа, чтобы различать два разных типа пользователей.

Теперь я понятия не имею, как обращаться с составным первичным ключом. Я установил его в базе данных и обновил остальную часть кода для него, но когда я использую функцию SQLAlchemy User.query.get(), он говорит мне, что я даю ему 3 аргумента вместо 2:

TypeError: get() takes 2 positional arguments but 3 were given

Классные вещи:

class User(db.Model):
    first_name = db.Column(db.String(80))
    last_name = db.Column(db.String(80))
    email = db.Column(db.String(120), unique=True, primary_key=True)
    tutor = db.Column(db.SmallInteger, primary_key=True)
    password = db.Column(db.String(120))
    location = db.Column(db.String(120))
    s_courses = db.Column(db.Text)
    t_courses = db.Column(db.Text)
    available = db.Column(db.SmallInteger)
    in_session = db.Column(db.SmallInteger)
    status = db.Column(db.SmallInteger)
    stars = db.Column(db.Float)
    rate = db.Column(db.Float)
    duration = db.Column(db.Float)

    def __init__(self, first_name, last_name, email, password, location, s_courses, t_courses, available, in_session,
                 status, stars, rate, duration, tutor):
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.password = password
        self.location = location
        self.s_courses = s_courses
        self.t_courses = t_courses
        self.available = available
        self.in_session = in_session
        self.status = status
        self.stars = stars
        self.rate = rate
        self.duration = duration
        self.tutor = tutor

class UserSchema(ma.Schema):
    class Meta:
        # Fields to expose
        fields = ('first_name', 'last_name', 'email', 'password', 's_courses', 't_courses', 'available', 'in_session',
                  'status', 'stars', 'rate', 'duration', 'tutor')


user_schema = UserSchema()
users_schema = UserSchema(many=True)

Получить пользовательский метод:

@app.route("/user/<key1>/<key2>", methods=["GET"])
def user_detail(key1, key2):
    user = User.query.get(key1, key2)
    if user is not None:
            return user_schema.jsonify(user)
    return jsonify("User not found")

Из того, что я видел, обычно это просто означает, что нужно добавить параметр self, но, насколько я могу судить, этот метод не относится к какому-либо классу, и self, кажется, не связывается ни с чем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...