Python Noob здесь,
В настоящее время я работаю с SQLAlchemy, и у меня есть это:
from __init__ import Base
from sqlalchemy.schema import Column, ForeignKey
from sqlalchemy.types import Integer, String
from sqlalchemy.orm import relationship
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
username = Column(String, unique=True)
email = Column(String)
password = Column(String)
salt = Column(String)
openids = relationship("OpenID", backref="users")
User.__table__.create(checkfirst=True)
#snip definition of OpenID class
def create(**kwargs):
user = User()
if "username" in kwargs.keys():
user.username = kwargs['username']
if "email" in kwargs.keys():
user.username = kwargs['email']
if "password" in kwargs.keys():
user.password = kwargs['password']
return user
Это в /db/users.py
, поэтому он будет использоваться как:
from db import users
new_user = users.create(username="Carson", password="1234")
new_user.email = "email@address.com"
users.add(new_user) #this function obviously not defined yet
но код в create()
немного глуп, и мне интересно, есть ли лучший способ сделать это, не требующий лестницу if, и который потерпит неудачу, если будут добавлены какие-либо ключи, которые не являются в объекте User уже. Как:
for attribute in kwargs.keys():
if attribute in User:
setattr(user, attribute, kwargs[attribute])
else:
raise Exception("blah")
таким образом, я мог бы поместить это в свою собственную функцию (если, как мы надеемся, она уже существует?), Поэтому мне не пришлось бы делать лестницу if снова и снова, и поэтому я мог бы изменить структуру таблицы без изменения этого кода. 1014 *
Есть предложения?