Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何识别使用pydal使用sqlalchemy创建的sqlite数据库?_Python_Sqlite_Sqlalchemy_Web2py_Pydal - Fatal编程技术网

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 do
migrate=False
就可以很好地使用该表,它将一些元数据添加到关联的*.table文件中,以维护数据库中当前架构的记录(因此,如果您更改模型定义,它可以确定将来要运行的迁移)。如果您不希望pyDAL管理迁移(即,更改模型定义时自动更改数据库架构),则可以保留
migrate=False
,而不需要*.table文件。