gpt4 book ai didi

python - 检查数据库模型的唯一性。通过 Flask-SQLAlchemy 插入或忽略

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:45 24 4
gpt4 key购买 nike

我有一个关于如何向数据库添加新的但独特的项目的问题。

app = Flask(__name__, template_folder='templates')
app.config.from_object('config')
db = SQLAlchemy(app)

类看起来像这样的多对多实现:

connections = db.Table('connections', db.metadata,
db.Column('book_id', db.Integer, db.ForeignKey('books.id')),
db.Column('author_id', db.Integer, db.ForeignKey('authors.id'))
)

class Author(db.Model):
__tablename__ = 'authors'
__searchable__ = ['a_name']
__table_args__ = {'sqlite_autoincrement': True,}

id = db.Column(db.Integer, primary_key=True)
a_name = db.Column(db.String(80), unique=True)

def __repr__(self):
return unicode(self.a_name)


class Book(db.Model):
__tablename__ = 'books'
__searchable__ = ['b_name']
__table_args__ = {'sqlite_autoincrement': True,}

id = db.Column(db.Integer, primary_key=True)
b_name = db.Column(db.String(80), unique=True)
authors = db.relationship('Author', secondary=lambda: connections,
backref=db.backref('books'))

def __repr__(self):
return unicode(self.b_name)

我只想添加唯一的数据库项目。如果我要写这段代码:

author = Author(a_name = "Author1")
book = Book(b_name = "Book1")
author.books.append(book)
db.session.add(author)
db.session.add(book)
db.session.commit()

而且我们的数据库中已经有一个名为“Author1”的作者,所以会出现错误。

IntegrityError: (IntegrityError) column a_name is not unique u'INSERT INTO authors (a_name) VALUES (?)' (u'\u0410\u0432\u0442\u043e\u04402',)

我是否需要检查此插入的唯一性以及如何检查?或者还有其他最佳解决方案?

最佳答案

ORM 不支持“MERGE”方法(例如“INSERT OR REPLACE”等),并且这些方法也有很多复杂性。我用 unique object食谱或其某些变体。当我进行大数据合并时,我会经常提前将某个特定 block 要处理的整组对象加载到字典中,因此只有一个 SELECT 语句加载它们,然后只需检查当我继续时,那本字典。

关于python - 检查数据库模型的唯一性。通过 Flask-SQLAlchemy 插入或忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com