簡體   English   中英

如何使用flask-sqlalchemy使兩個不同表中的兩個主鍵唯一?

[英]How do I make two primary keys, in two different tables, unique using flask-sqlalchemy?

所以我正在一個類似論壇的網站上使用 python 框架 Flask 進行討論。 我使用 SQLite 建立了一個數據庫。 我定義了兩個表(類)並為兩者創建了主鍵。 但是,它們生成的主鍵是相同的。 例如,對於第一組數據,兩者的主鍵都是 1,我無法區分這兩組數據。 如果需要,我可以訪問第一個表的數據,但是當我嘗試獲取第二個表的數據時,它再次為我提供了第一個表的數據。 有什么辦法可以同時擁有兩個唯一的主鍵,或者我必須設置兩個不同的數據庫。

from datetime import datetime
from flaskblog import db, login_manager
from flask_login import UserMixin


@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))


class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)
    posts_addmath = db.relationship('PostAddmath', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"


class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"


class PostAddmath(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"

這些是models.py 中的表。

id_addmath = db.Column(db.Integer, primary_key=True)

我嘗試更改“PostAddmath”類中的“id”變量,但這沒有用。

@app.route("/post/<int:post_id>")
@login_required
def post_intmath(post_id):
    post = Post.query.get_or_404(post_id)
    return render_template('subjects/intmath/post_intmath.html', title=post.title, post=post)


@app.route("/post/<int:post_id>")
@login_required
def post_addmath(post_id):
    post = PostAddmath.query.get_or_404(post_id)
    return render_template('subjects/addmath/post_addmath.html', title=post.title, post=post)

這就是訪問我的 routes.py 中數據的方式。

當我嘗試使用“post.id”訪問數據時,它只給我第一個表結果而不是發送表。

如果我必須設置不同的數據庫,請告訴我如何操作。 任何幫助是極大的贊賞。 謝謝你。

您對post_intmathpost_addmath的路由相同,您必須更改路由,例如第一條路由保持原樣/post/<int:post_id> ,第二條路由將其更改為/addpost/<int:post_id>例如。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM