这里有一个web2py和python新手。
我尝试用MySQL DB作为后端数据库做一个示例Web应用程序。我已经在MySQL中单独创建了一个表并填充了值,我想在UI中显示表值。我有一个错误 -
“class'gluon.contrib.pymysql.err.InternalError'>(1050,你”桌子已经存在“)”
我的配置文件如下:
db.py
if not request.env.web2py_runtime_gae:
db = DAL('mysql://xxxxx',pool_size=1,check_reserved=['all'])
else:
session.connect(request, response, db=db)
response.generic_patterns = ['*'] if request.is_local else []
from gluon.tools import Auth, Crud, Service, PluginManager, prettydate
auth = Auth(db)
crud, service, plugins = Crud(db), Service(), PluginManager()
## create all tables needed by auth if not custom tables
auth.define_tables(username=False, signature=False)
## after defining tables, uncomment below to enable auditing
# auth.enable_record_versioning(db)
db.define_table('user_details',
Field('user_id', 'text'),
Field('first_name', 'text'),
Field('last_name', 'text'),
Field('city', 'text'),
Field('user_st', 'text'),migrate=True)
我的主页看起来像这样
{{ rows = db(db.user_details).select() }}
{{if len(rows):}}
<ul>
{{ for r in rows: }}
<li>
{{=r.name}}
</li>
{{pass}}
</ul>
{{pass}}
我不确定我错过了什么。任何帮助表示感谢,谢谢。
我现在明白了。只需要改变migrate = False。感谢。
答案 0 :(得分:1)
您有migrate=True
,并且web2py没有任何已创建该表的记录,因此它正在尝试再次创建它。您可以通过临时设置fake_migrate=True
(或者设置migrate=False
并且不要让web2py处理迁移)来获取web2py来更新有关该表的记录。
另外,请注意,默认情况下,web2py希望每个表都包含一个名为“id”的自动增量整数字段,因此您应该确保您的表包含这样的字段。更好的是,如果表是新的,不要在MySQL中手动创建它。相反,只需让web2py创建它(它将在第一次运行表定义时执行)。一旦它由web2py创建,您就可以添加任何您喜欢的记录。