小编doh*_*nto的帖子

在插入 Python 之前进行 SQLAlchemy 检查

我有一个关于如何检查条目是否已经在数据库表中的更合适/更有效的方法的问题。

假设我有一个Foo用单个属性调用的表,Name它也是unique。

如果已经存在具有此类名称的条目,在插入之前检查的更好方法是什么?我可以想到两种选择:

from sqlalchemy import MetaData, Table, Column, String, \
create_engine
from sqlalchemy.orm import mapper, relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.exc import IntegrityError

Base = declarative_base()

class Foo(Base):
    __tablename__ = "foo"

    name = Column(String(), primary_key=True)

    @staticmethod
    def silent_insert1(name):
            if not session.query(Foo).filter(Foo.name == name).first():
                    foo = Foo()
                    foo.name = name
                    session.add(foo)
                    session.commit()
            else:
                    print("already exists 1")

    @staticmethod
    def silent_insert2(name):
            try:
                    foo = Foo()
                    foo.name = name
                    session.add(foo)
                    session.commit()
            except(IntegrityError):
                    print("already exists 2") …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy exception race-condition

4
推荐指数
1
解决办法
2103
查看次数

标签 统计

exception ×1

python ×1

race-condition ×1

sqlalchemy ×1