在作为全局变量导入时,format方法不会为字符串赋值



我在名为queries.py的文件中定义了一些变量,并将它们导入另一个名为views.py的文件中。问题是python格式没有将每个变量的值分配给相应的占位符。考虑以下代码行:

queries.py
main_where_query = ''' where users.deleted_account is null
and length(users.phone_number) > 2
and length(users.phone_number) < 20
and users.phone_number not like '+98888888%'
'''
messages_where_query = """{0} 
and messages.date>'{1}' 
and messages.date<'{2}'
"""
views.py
from .queries import *
def get_activity(request):
global main_where_query
global messages_where_query
messages_where_query.format(main_where_query, str(start_date), str(end_date))
....

输出为:

select count(messages.message_id) from messages
join users on users.id = messages.sender
{0} 
and messages.date>'{1}' 
and messages.date<'{2}'
and messages.media_type = 0

正如您所看到的,所有占位符都没有受到影响,如{0}{1}{2}。我确信这些变量不是空的,并且导入正确。

我认为问题的出现是因为您正在对messages_where_query进行格式化,而format不是这样工作的。格式化后需要将messages_where_query设置为自身。此外,您不需要使用global关键字;你已经从另一个文件导入了它们,所以它们本身不是全局变量

您的views.py脚本应该如下所示:

from .queries import *
def get_activity(request):
global main_where_query
global messages_where_query
messages_where_query = 
messages_where_query.format(main_where_query, str(start_date), str(end_date))
....

最新更新