PythonDjango-如何在manage.py shell中传递HTTPS URL作为函数参数



我正试图在python shell中调用一个函数insert_db。insert_db需要一个httpsurl来调用其他一些函数。

在我的Django python项目文件夹的终端中,我键入"/manage.py shell,让Django的python shell继续运行。

之后:

>>> from send_values.api.send_to_db import insert_db
>>> insert_db('https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json')

我得到以下错误:

requests.exceptions.MissingSchema:无效的URL"h":未提供任何架构。也许你的意思是http://h

send_to_db.py代码:

# python send_to_db.py 'https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json'
from ..models import Correlations
from .lambda_async_s3_uri import filter_complete
import sys
def insert_db(args):
print(args)
table_values = filter_complete(args)
for value_set in table_values:
new_value_set = Correlations.objects.create(value_set)
# new_value_set = Correlations.objects.create(experimentName=item[3], colLabel=item[5], rowLabel=item[4], rowNum=item[0], colNum=item[1], cor=item[2])
new_value_set.save()
def main(args):
insert_db(args)
if __name__ == '__main__':
main(sys.argv[1:])

感谢您的帮助。如果你需要更多信息,请告诉我。

注:

1( 我知道insert_db函数的工作原理是应该的(获取url,下载一些文件,解析一些数据,并根据这些数据进行一些计算(。在做这个Django项目之前,在一个纯Python项目中,我习惯这样称呼它:python send_to_db.py'https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=实验&replication_type=等基因&组装=GRCh38&award.rfa=编码4&format=json'在早些时候,我没有试图将其添加到Django数据库,而是打印insert_db将计算的值(它在终端中成功输出(。用这个bash命令在终端中传递url当时很有效,我想知道如何在python中做到这一点。

2( 我还在中尝试了以下操作/manage.py shell:

>>> from send_values.api.send_to_db import insert_db
>>> url = 'https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json'
>>> insert_db(url)

但我仍然得到相同的错误:

requests.exceptions.MissingSchema:无效的URL"h":未提供任何架构。也许你的意思是http://h

只是一个粗略的猜测-我没有检查filter_complete()应该做什么-但考虑到您的工作代码的外观和错误消息,它似乎需要一个列表或元组,而不是字符串。如果这是对的,你应该这样称呼它:

>>> from send_values.api.send_to_db import insert_db
>>> url = 'https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json'
>>> # make the argument a list
>>> insert_db([url])

如果这解决了问题,那么您可能需要更新代码以使用*varargs

from ..models import Correlations
def insert_db(*args):
print(args)
table_values = filter_complete(args)
for value_set in table_values:
new_value_set = Correlations.objects.create(value_set)
new_value_set.save()
def main(*args):
insert_db(*args)
if __name__ == '__main__':
main(*sys.argv[1:])

然后你可以按预期称之为:

>>> insert_db('https://some.url.here')

相关内容

最新更新