py4web DAL,(遗留)数据库探索-如何获得所有表,字段等?



不幸的是,没有py4web标签(应该添加一个模块),所以我把它放在web2py下,因为DAL是相同的。如果有人可以创建一个标签(也许是与Massimo交谈…),那将不胜感激。

使用py4web/web2py几乎可以访问任何数据库。有了自动导入,就不需要重新定义字段了。

from pydal import DAL, Field
db = DAL('sqlite://legacydb.sqlite', folder='subdirectory/additionalsubdirectory', auto_import=True)

现在应该可以获得所有表,列等(在Oracle中:select * from all_tables, select * from user_tab_columns等可用)

db.tables

它不工作。(它说它是空的,但有两个表。

db.person.fields 

即使知道有一个table person在那里,也没有显示字段。

但是当数据库和表被创建时,它会工作,然后立即'aks'。

如何做到这一点?

请确保它指向相同的数据库文件夹,并带有*。表可用,如果在py4web或终端上运行pydal,请确保执行db.commit(),如果没有,它只是存储在内存中而不是写入数据库

在jupyter笔记本(创建两个笔记本,一个为auto_import=False的define_table,另一个为auto_import=True的define_table)

notebook1

from pydal import DAL, Field
from datetime import datetime
now = datetime.now()
db = DAL('sqlite://jupyter_pydal.sqlite', folder = 'databases', auto_import = False)
db.define_table('test',
Field('string_0'),
Field('text_0', 'text'),
Field('integer_0', 'integer'), 
Field('double_0', 'double'),
Field('date_0', 'date'),
Field('datetime_0', 'datetime'),
#format = lambda r: f'{r.name}' )
format = lambda r: '%s' % (r.name) )
if db(db.test).isempty():
p0 = db.test.insert(string_0 = 'string_0', text_0 = 'text_0', integer_0 = 0, double_0 = 0, date_0 = now, datetime_0 = now)
p1 = db.test.insert(string_0 = 'string_1', text_0 = 'text_1', integer_0 = 1, double_0 = 1, date_0 = now, datetime_0 = now)
db.commit()
db._uri
db._dbname
db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)

notebook2

from pydal import DAL, Field
db = DAL('sqlite://jupyter_pydal.sqlite', folder = 'databases', auto_import = True)
db._uri
db._dbname
db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)

result for command

db._uri
db._dbname
db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)

notebook2上的与notebook1相同

,但当删除*。表上的数据库文件夹和重新运行notebook2的结果

db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)

在notebook2上找不到

ref for pydal on web2py site

http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer Using-DAL-without-define-tables

最新更新