首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别使用pydal使用sqlalchemy创建的sqlite数据库?

如何识别使用pydal使用sqlalchemy创建的sqlite数据库?
EN

Stack Overflow用户
提问于 2018-08-28 02:05:46
回答 1查看 246关注 0票数 0

我使用sqlalchemy创建了一个非常简单的数据库,如下所示:

代码语言:javascript
复制
from sqlalchemy import Column, Integer, String                                                                                                                                           
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class Person(Base): 
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)

engine = create_engine('sqlite:///sqlalchemy_example.db')

# Create all tables in the engine. This is equivalent to "Create Table"
# statements in raw SQL.
Base.metadata.create_all(engine)

Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)
session = DBSession()

# Insert a Person in the person table
new_person = Person(name='new person')
session.add(new_person)
session.commit()

然后我试着用pyDAL 参考文献来阅读它。

代码语言:javascript
复制
from pydal import DAL, Field
db = DAL('sqlite://sqlalchemy_example.db', auto_import=True)
db.tables
>> []
db.define_table('person', Field('name'))
>> OperationalError: table "person" already exists

如何使用pyDAL访问表?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-28 13:45:26

首先,不要设置auto_import=True,因为只有当表存在pyDAL *.table迁移元数据文件时,这才是相关的,这里的情况不是这样的。

其次,pyDAL不知道表已经存在,而且由于默认情况下启用了迁移,所以它尝试创建表。要防止这种情况,只需禁用迁移:

代码语言:javascript
复制
# Applies to all tables.
db = DAL('sqlite://sqlalchemy_example.db', migrate_enabled=False)

或者:

代码语言:javascript
复制
# Applies to this table only.
db.define_table('person', Field('name'), migrate=False)

如果希望pyDAL接管对该表的未来更改的迁移,那么您应该运行一个“假迁移”,这将导致pyDAL为该表生成一个*.table迁移元数据文件,而不实际运行迁移。要做到这一点,请暂时进行以下更改:

代码语言:javascript
复制
db.define_table('person', Field('name'), fake_migrate=True)

在为单个请求保留上述内容之后,将生成*.table文件,您可以删除fake_migrate=True参数。

最后,请注意,pyDAL希望id字段是一个自动递增的整数主键字段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52049114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档