我一直在使用sqlalchemy.orm中的@validates装饰器来验证字段,只要所有字段彼此独立,所有字段都很顺利,例如:
@validates('field_one')
def validates_field_one(self, key, value):
#field one validation
@validates('field_two')
def validates_field_two(self, key, value):
#field two validation
Run Code Online (Sandbox Code Playgroud)
但是,现在我需要进行一些验证,这需要同时访问field_one和field_two.看起来验证接受验证装饰器的多个参数,但是,它只会为每个参数运行一次验证函数,如下所示:
@validates('field_one', 'field_two')
def validates_fields(self, keys, values):
#field validation
Run Code Online (Sandbox Code Playgroud)
结果验证field_one的工作流程,然后验证field_two.但是,我想同时验证两者(一个简单的例子是断言field_one的值不是field_two的值,其中一个示例是禁止在图中的自循环,其中field_one和field_two引用节点,它正在边缘上执行验证).如何才能成为最佳方式?
我知道烧瓶的功能render_template.我必须给出模板的文件名.但现在我想渲染一个模板的字符串(即模板的内容).那讲得通.但我现在不想解释原因.如何简单地渲染模板的文本?
admin.py如下: -
class SiteDetailInline(admin.TabularInline):
model = SiteDetail
form = SiteDetailForm
fields = ('name', )
can_delete = False
extra = 1
max_num = 1
def get_readonly_fields(self, request, obj=None):
if obj:
return ('clmsid',) + self.readonly_fields
return self.readonly_fields
class SiteAdmin(admin.ModelAdmin):
inlines = [ SiteDetailInline, ]
def queryset(self, queryset):
return Site.objects.filter(~Q(id = settings.SITE_ID))
signals.post_save.connect(create_sites_default_user, sender=Site)
admin.site.unregister(Site)
admin.site.register(Site, SiteAdmin)
Run Code Online (Sandbox Code Playgroud)
models.py如下: -
class SiteDetail(models.Model):
name = models.CharField(max_length=100, unique=True)
client = models.ForeignKey(client)
site = models.ForeignKey(Site)
clmsid = models.CharField(max_length=15, unique=True, verbose_name='clms id', help_text='clms identifier', ) # unique identifier …Run Code Online (Sandbox Code Playgroud) 我已经使用 sqlalchemy 和 sqlalchemy-migrate 向数据库添加了一个表,当我对命中数据库的无关代码运行单元测试时,出现以下错误:
Traceback (most recent call last):
File "/Users/lorin/nova/instance_type_metadata/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 208, in run
self.setUp()
File "/Users/lorin/nova/instance_type_metadata/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 291, in setUp
self.setupContext(ancestor)
File "/Users/lorin/nova/instance_type_metadata/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 314, in setupContext
try_run(context, names)
File "/Users/lorin/nova/instance_type_metadata/.nova-venv/lib/python2.6/site-packages/nose/util.py", line 478, in try_run
return func()
File "/Users/lorin/nova/metadata-debugging/nova/tests/__init__.py", line 62, in setup
FLAGS.vpn_start,
File "/Users/lorin/nova/metadata-debugging/nova/network/manager.py", line 577, in create_networks
network_ref = db.network_get_by_cidr(context, cidr)
File "/Users/lorin/nova/metadata-debugging/nova/db/api.py", line 628, in network_get_by_cidr
return IMPL.network_get_by_cidr(context, cidr)
File "/Users/lorin/nova/metadata-debugging/nova/db/sqlalchemy/api.py", line 99, in wrapper
return f(*args, **kwargs)
File "/Users/lorin/nova/metadata-debugging/nova/db/sqlalchemy/api.py", line 1308, in …Run Code Online (Sandbox Code Playgroud) 我正在使用Flask-sqlalchemy,我该如何配置它no autoflush.目前我正在做类似的事情
db = SQLAlchemy()
...
db.init_app(app)
...
db.session.configure(autoflush=False)
Run Code Online (Sandbox Code Playgroud)
但它给出了错误.如何解决这个问题.
我想将列添加到现有表的某个位置或移动其中一列.但我在Sqlalchemy-migrate中找不到任何方法.
我想知道sqlalchemy-migrate中MySQL查询后的等效方法
ALTER TABLE tablename ADD column_name2 INT AFTER column_name1
ALTER TABLE tablename ADD column_name2 INT FIRST
ALTER TABLE tablename MODIFY COLUMN column_name2 INT AFTER column_name1;
Run Code Online (Sandbox Code Playgroud) 自动加载线程安全吗?我找不到与此有关的任何文档。通过以下代码,无法在大约前20毫秒内成功加载表(无异常,没有警告或更高级别的日志,但table.columns是一个空列表)。
from sqlalchemy import *
import logging
import threading
import time
logging.basicConfig(level = logging.INFO, format = '%(asctime)s:%(message)s', filename = "autoload_test.log")
logging.getLogger("sqlalchemy").setLevel(logging.DEBUG)
engine = create_engine("postgresql://madk@localhost/mydb", echo = False)
metadata = MetaData(bind=engine)
lock = threading.Lock()
def load_table():
while True:
try:
table = Table('mytbl', metadata, autoload=True, autoload_with=engine)
logging.info("size of columns:[%s]", len(table.columns))
except:
logging.warn("error occured", exc_info = True)
for i in range(5):
t = threading.Thread(target = load_table)
t.daemon = False
t.start()
time.sleep(4)
Run Code Online (Sandbox Code Playgroud)
有没有办法查明持久 sqlalchemy 映射对象是否被修改?
这意味着我从数据库收到一个对象(持久的,具有身份的)。然后用户(也许!)在对话框窗口中修改其数据。
有没有办法找出内存/RAM 中的对象与数据库本身中的实例相比是否被修改?我不想将每个属性与对话框窗口中的数据进行比较。
我想在我的网站上创建元描述,此刻我具有用于获取产品描述的功能:
{{ product.description|nl2br }}
Run Code Online (Sandbox Code Playgroud)
需要编辑此功能以仅获取用于创建元描述的前150个字符,这可能在模板中吗?还是需要在views.py中创建此功能?
修改子表后,如何更新父时间戳?
我想使用父表时间戳检查我的其余客户端是否应更新这些表的本地版本。
class Parent(db.Model):
id = db.Column(db.Integer, primary_key=True)
version = db.Column(db.Integer)
timestamp = db.Column(db.DateTime,
default=datetime.utcnow,
onupdate=datetime.utcnow)
childs = db.relationship('Children',
backref='parent',
lazy='dynamic',
cascade="all, delete-orphan")
class Children(db.Model):
id = db.Column(db.Integer, primary_key=True)
version = db.Column(db.Integer)
timestamp = db.Column(db.DateTime,
default=datetime.utcnow,
onupdate=datetime.utcnow)
parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'), nullable=False)
Run Code Online (Sandbox Code Playgroud)
并测试一下:
db.create_all()
parent = Parent(version=1)
child = Children(version=1, parent=parent)
db.session.add_all([parent, child])
db.session.commit()
print "parent timestamp: %s, child timestamp %s" % (parent.timestamp, child.timestamp)
previous_timestamp = parent.timestamp
parent.version = 2
db.session.add(parent)
db.session.commit()
assert parent.timestamp != previous_timestamp # this works
print …Run Code Online (Sandbox Code Playgroud) 我一直在研究烧瓶,我遇到了闪光灯.如果在服务器端调用了闪存,它会在页面上显示一条消息.但是,我想在警告框中显示内容get_flashed_messages().我尝试创建JS函数并传递{{message}},但循环打印调用,即将调用作为字符串.
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以解决吗?
python ×11
sqlalchemy ×7
flask ×4
jinja2 ×3
django ×1
django-admin ×1
django-sites ×1
python-2.x ×1
sql ×1
validation ×1