我在SQLAlchemy
上有以下模型:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.sql import func
from sqlalchemy.orm import sessionmaker
import datetime
class Site(Base):
__tablename__ = 'site'
id = Column(Integer, primary_key=True)
url = Column(String(64), nullable=False)
def __repr__(self):
return "<Site(id='%s', home_url='%s')>" % (
self.id, self.url)
我可以创建新实例:
a_site = Site(url='http://stackoverflow.com/')
在我实例化时,有没有办法检查参数是否是有效的URL?
例如,在调用构造函数时调用方法is_valid_url(url)
并在is_valid_url
返回False
时引发异常?
答案 0 :(得分:0)
是的,您可以将url
定义为hybrid_property
并实施:
@url.setter
def url(self, value):
#your logic here
如http://docs.sqlalchemy.org/en/latest/orm/extensions/hybrid.html
中所述答案 1 :(得分:0)
您可以像在任何python对象中一样创建构造函数:
class Site(Base):
__tablename__ = 'site'
id = Column(Integer, primary_key=True)
url = Column(String(64), nullable=False)
def __init__(self, **kwargs):
self.url = kwargs.get('url')
if not is_valid_url(self.url):
raise NotValidURLException("invalid url address")
...
只需在某处创建方法is_valid_url(你可以找到大量可以检查它的正则表达式。)