SQLAlchemy:表已经存在

abh*_*kar 6 python sqlalchemy

我们什么时候在SQLAlchemy中得到以下错误?

sqlalchemy.exc.OperationalError: (OperationalError) (1050, "Table 'foobar' already exists")
Run Code Online (Sandbox Code Playgroud)

foobar表已存在,但为什么SQLAlchemy尝试在已存在时创建表.我假设它不应该创建表,如果已经存在.

我正在使用以下语法来创建表:

t = Table('foobar', metadata,
      Column('col1', String(50), primary_key=True),
      Column('col2', String(100)),
      mysql_engine='InnoDB',
      mysql_charset='utf8')
Run Code Online (Sandbox Code Playgroud)

(我正在并行调用同一个程序10次)

Rob*_*pta 18

只需使用模式对象(表,索引和序列) 创建删除方法,使用checkfirst = True 关键字,表将自动添加"IF NOT EXISTS或IF EXISTS CLAUSE",适用于SQL.

例如:

t = Table('foobar', metadata,
  Column('col1', String(50), primary_key=True),
  Column('col2', String(100)),
  mysql_engine='InnoDB',
  mysql_charset='utf8')

t.create(checkfirst=True)
Run Code Online (Sandbox Code Playgroud)


NIl*_*rma 3

如果 foobar 表已经存在,您可以这样做:

users = Table('foobar', metadata, autoload=True)
Run Code Online (Sandbox Code Playgroud)

SQLAlchemy 会自动从数据库中找出表的结构。

首先使用自动加载检查表是否存在,如果不存在则创建表。