ここでPython初心者、
現在、私は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 はしごを何度も実行する必要がないため、このコードを変更せずにテーブル構造を変更できます。
助言がありますか?