SQLAlchemy检查新实例上的参数

时间:2017-01-09 11:53:57

标签: python sqlalchemy

我在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时引发异常?

2 个答案:

答案 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(你可以找到大量可以检查它的正则表达式。)