Python 为什么我得到一个关于未定义字符串的错误?
我正在使用redis对象映射器,当我尝试运行以下代码时:Python 为什么我得到一个关于未定义字符串的错误?,python,redis,Python,Redis,我正在使用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.ran
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 object mapper)github页面上的联机示例相同的方式键入了代码 感谢@univerio的评论,似乎
字符串
是由从rom导入的*
仅在python2.x上导入的,引用自:
对于python3.x,您需要使用Text
class User(Model):
uName=Text(required=True)
password=Text(required=True)
作为旁注,尽量不要使用xxx导入的通配符导入*
通配符导入-实际上:
应避免通配符导入(从导入*),因为它们
使名称空间中存在的名称不清楚,这会造成混淆
读者和许多自动化工具。有一个合理的用途
通配符导入的情况,即重新发布内部
接口作为公共API的一部分(例如,覆盖纯API)
一个接口的Python实现,该接口的定义来自
可选加速器模块,以及将使用哪些定义
覆盖的内容事先不知道)
当在Python2.x上时,
String
列进入rom
模块,所以从rom导入*
应该导入它,所以我认为OP正在运行Python3,在这种情况下,他应该使用Text
。
class User(Model):
uName=Text(required=True)
password=Text(required=True)