Python 如何识别使用pydal使用sqlalchemy创建的sqlite数据库?
我使用Python 如何识别使用pydal使用sqlalchemy创建的sqlite数据库?,python,sqlite,sqlalchemy,web2py,pydal,Python,Sqlite,Sqlalchemy,Web2py,Pydal,我使用sqlalchemy创建了一个非常简单的数据库,如下所示: from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative
sqlalchemy
创建了一个非常简单的数据库,如下所示:
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
阅读它
如何使用pyDAL访问表
谢谢首先,不要设置
auto_import=True
,因为这仅在表中存在pyDAL*.table迁移元数据文件时才相关,此处不适用
其次,pyDAL不知道该表已经存在,并且由于默认情况下启用了迁移,因此它会尝试创建该表。要防止出现这种情况,只需禁用迁移:
# Applies to all tables.
db = DAL('sqlite://sqlalchemy_example.db', migrate_enabled=False)
或:
如果希望pyDAL接管迁移,以便将来对此表进行更改,则应运行“假迁移”,这将导致pyDAL在不实际运行迁移的情况下为此表生成*.table迁移元数据文件。要执行此操作,请临时进行以下更改:
db.define_table('person', Field('name'), fake_migrate=True)
为单个请求保留上述内容后,将生成*.table文件,您可以删除false\u migrate=True
参数
最后,请注意,pyDAL希望
id
字段是一个自动递增的整数主键字段。首先,不要设置auto_import=True
,因为这仅在pyDAL*.table迁移元数据文件存在于表中时才相关,这里的情况并非如此
其次,pyDAL不知道该表已经存在,并且由于默认情况下启用了迁移,因此它会尝试创建该表。要防止出现这种情况,只需禁用迁移:
# Applies to all tables.
db = DAL('sqlite://sqlalchemy_example.db', migrate_enabled=False)
或:
如果希望pyDAL接管迁移,以便将来对此表进行更改,则应运行“假迁移”,这将导致pyDAL在不实际运行迁移的情况下为此表生成*.table迁移元数据文件。要执行此操作,请临时进行以下更改:
db.define_table('person', Field('name'), fake_migrate=True)
为单个请求保留上述内容后,将生成*.table文件,您可以删除false\u migrate=True
参数
最后,请注意,pyDAL希望
id
字段是一个自动递增的整数主键字段。谢谢。回答了这个问题。我想有一件事是我不完全理解.table文件的作用。在pyDAL运行迁移(create table,alter table)时,它会向相关的*.table文件添加一些元数据,以在数据库中维护当前模式的记录(因此,如果您更改模型定义,它可以确定将来要运行哪些迁移)。如果您不希望pyDAL管理迁移(即,在更改模型定义时自动更改数据库架构),然后您可以离开migrate=False
而不需要*.table文件。谢谢。回答了这个问题。我想有一件事是我不完全理解.table文件的作用。在pyDAL运行迁移(创建表、更改表)时,似乎我可以不用by domigrate=False
就可以很好地使用该表,它将一些元数据添加到关联的*.table文件中,以维护数据库中当前架构的记录(因此,如果您更改模型定义,它可以确定将来要运行的迁移)。如果您不希望pyDAL管理迁移(即,更改模型定义时自动更改数据库架构),则可以保留migrate=False
,而不需要*.table文件。