[英]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_intmath
和post_addmath
的路由相同,您必須更改路由,例如第一條路由保持原樣/post/<int:post_id>
,第二條路由將其更改為/addpost/<int:post_id>
例如。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.