为什么出现“字符串未定义”的错误?
我正在使用 Redis 对象映射器,当我尝试运行这段代码时:
from redis import *
from rom import util
from rom import *
util.set_connection_settings(host='localhost', db=7)
class User(Model):
uName=String(required=True)
password=String(required=True)
thisId=(random.random()*100)
user=User(uName='pfleet',password='pass')
user.save()
#todo, save session ID
user2=User.get_by(uName='pfleet')
不知道为什么,当我运行这段代码时,出现了一个错误,提示“名称字符串未定义”,尽管我在输入代码时和 ROM(Redis 对象映射器)GitHub 页面上的在线示例完全一样。
1 个回答
1
感谢@univerio的评论,看来在python2.x中,String
是通过from rom import *
这种方式导入的,引用自文档说明:
note:: this column type is only available in Python 2.x
而在python3.x中,你需要使用Text
来代替。
class User(Model):
uName=Text(required=True)
password=Text(required=True)
顺便提一下,尽量不要使用from xxx import *
这种通配符导入方式——这其实是个很糟糕的做法:
通配符导入(从 import *)应该避免,因为它让人不清楚当前命名空间里有哪些名字,这会让读代码的人和很多自动化工具感到困惑。通配符导入有一个可以辩护的使用场景,就是将内部接口作为公共API的一部分重新发布(例如,用可选加速模块中的定义覆盖一个纯Python实现的接口,但具体哪些定义会被覆盖事先并不知道)。