获取 sqlAlchemy 字段名
Get sqlAlchemy field name
我的 sqlAlchemy 模型 table 是这样的:
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
uid = Column('id', Integer, primary_key=True)
name = Column('name', String(255), nullable=False)
surname = Column('surname', String(255), nullable=False)
我想创建方法“user_errors”,它将成为 return 不正确字段的字典
errors = {field_name : field_content}
但我不知道如何在代码中获取 field_name。
我想像这样使用它:
def user_errors(user):
errors = {}
if is_error(user.name):
errors[user.name.__name__] = user.name
...
return errors
您打算将其实现为用户的方法 class,是吗?
如果是这样,下面的代码应该适合您:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
def is_error(name):
if name != "Guido Van Rossum":
return True
return False
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
uid = Column('id', Integer, primary_key=True)
name = Column('name', String(255), nullable=False)
surname = Column('surname', String(255), nullable=False)
def user_errors(self):
errors = {}
if is_error(self.name):
errors["user_name"] = self.name
# do some stuff
return errors
输出:
>>> user = User()
>>> user.name = 'test'
>>> user.user_errors()
{'user_name': 'test'}
如果你想创建一个单独的函数,你的版本是正确的:
user = User()
user.name = 'test'
def user_errors(user):
errors = {}
if is_error(user.name):
errors["user_name"] = user.name
# do some stuff
return errors
user_errors(user)
Output:{'user_name': 'test'}
如我所见,你不需要使用一些神奇的参数来为错误字典设置键名,因为你已经定义了你正在检查一个用户名,无论如何,如果你想统一错误检查并迭代所有用户 class 参数,尝试像这样使用某物:
def user_errors(user):
errors = {}
for col_name in user.__table__.columns.keys():
col_value = user.__getattribute__(col_name)
if is_error(col_value):
errors[col_name] = col_value
# do some stuff
return errors
# to get this stuff working you should define ALL class attributes, otherwise - get exeption
user = User()
user.id = 1
user.name = 'test'
user.surname = 'test'
user_errors(user)
Output: {'id': 1, 'name': 'test', 'surname': 'test'}
希望对您有所帮助
有用的链接:
https://www.tutorialsteacher.com/python/magic-methods-in-python
我的 sqlAlchemy 模型 table 是这样的:
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
uid = Column('id', Integer, primary_key=True)
name = Column('name', String(255), nullable=False)
surname = Column('surname', String(255), nullable=False)
我想创建方法“user_errors”,它将成为 return 不正确字段的字典
errors = {field_name : field_content}
但我不知道如何在代码中获取 field_name。
我想像这样使用它:
def user_errors(user):
errors = {}
if is_error(user.name):
errors[user.name.__name__] = user.name
...
return errors
您打算将其实现为用户的方法 class,是吗?
如果是这样,下面的代码应该适合您:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
def is_error(name):
if name != "Guido Van Rossum":
return True
return False
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
uid = Column('id', Integer, primary_key=True)
name = Column('name', String(255), nullable=False)
surname = Column('surname', String(255), nullable=False)
def user_errors(self):
errors = {}
if is_error(self.name):
errors["user_name"] = self.name
# do some stuff
return errors
输出:
>>> user = User()
>>> user.name = 'test'
>>> user.user_errors()
{'user_name': 'test'}
如果你想创建一个单独的函数,你的版本是正确的:
user = User()
user.name = 'test'
def user_errors(user):
errors = {}
if is_error(user.name):
errors["user_name"] = user.name
# do some stuff
return errors
user_errors(user)
Output:{'user_name': 'test'}
如我所见,你不需要使用一些神奇的参数来为错误字典设置键名,因为你已经定义了你正在检查一个用户名,无论如何,如果你想统一错误检查并迭代所有用户 class 参数,尝试像这样使用某物:
def user_errors(user):
errors = {}
for col_name in user.__table__.columns.keys():
col_value = user.__getattribute__(col_name)
if is_error(col_value):
errors[col_name] = col_value
# do some stuff
return errors
# to get this stuff working you should define ALL class attributes, otherwise - get exeption
user = User()
user.id = 1
user.name = 'test'
user.surname = 'test'
user_errors(user)
Output: {'id': 1, 'name': 'test', 'surname': 'test'}
希望对您有所帮助
有用的链接: https://www.tutorialsteacher.com/python/magic-methods-in-python