【问题标题】:How to convert Node.js to python如何将 Node.js 转换为 python
【发布时间】:2020-01-18 18:29:36
【问题描述】:

大家好,我想将这个 node.js 代码的 sn-p 转换为 python,我在 python 方面不是特别强。对于一个小的背景故事,我正在执行一个 api get 请求来提取数据,我特别想提取一个表中的所有内容(字段和值)。到目前为止,从 node.js sn-p 我了解到我正在使用 for 循环读取一个 txt 文件以遍历索引中一个表中的所有字段,但我不知道如何在我的 python 代码中实现这一点.有什么可以帮助的建议吗?

这是一个tables.txt文件

{"Tables":
    [
        {
            "Name": "Event",
            "EventType": "CSummary",
            "Fields": "*",
            "SortBy": "WhenOccurred",
            "SortType": "Date",
            "Last": "01/14/2020 16:02:00 -05:00"
        }
    ]
}

这是我到目前为止所做的,但我不知道如何前进

scriptfile = open('tables.txt','r+')
r = requests.get(url, headers=headers, json={"script": " this is a work in progress"}, verify=verify)
resources = json.dumps(scriptfile)
for table in range(len(resources):

这是我要转换的node.js sn-p。

function GetSecrets(authToken, authCookie, next) {

            let resources = JSON.parse(fs.readFileSync('tables.txt').toString());

            console.log("Tables to get: " + resources.Tables.length);

            // Loop through all the tables to get
            for (let i = 0; i < resources.Tables.length; i++) {
                let thisResource = resources.Tables[i];
                let tableName = thisResource.Name;
                let sortBy = thisResource.SortBy;
                let lastGot = thisResource.Last;
                let fields = thisResource.Fields;
                let sortType = thisResource.SortType;
                let eventType = thisResource.EventType;
                let fileName = '';

                let sql = '';

                if (tableName === 'Event') {
                    sql = "SELECT " + fields + " FROM " + tableName + " WHERE Event.EventType IN ('" + eventType + "') AND " + tableName + "." + sortBy + " > DateFunc('" + lastGot + "') ORDER BY " + tableName + "." + sortBy + ";"

                    fileName = "Event-" + eventType;
                } else {
                    if (sortType === 'None') {
                        sql = "SELECT " + fields + " FROM " + tableName + ";";
                    } else {
                        sql = "SELECT " + fields + " FROM " + tableName + " WHERE " + tableName + "." + sortBy + " > DateFunc('" + lastGot + "') ORDER BY " + tableName + "." + sortBy + ";"
                    }
                    fileName = tableName;
                }


            post_data = JSON.stringify({
                "Script": sql,
            });

【问题讨论】:

    标签: python node.js api get


    【解决方案1】:

    这对你有用:

    import json
    def GetSecrets(resources):
        resources = json.load(open("tables.txt"))
        print(f"Tables to get: {len(resources)}")
        for resource in resources.values():    
            tableName = resource[0]["Name"]
            sortBy = resource[0]["SortBy"]
            lastGot = resource[0]["Last"]
            fields = resource[0]["Fields"]
            sortType = resource[0]["SortType"]
            eventType = resource[0]["EventType"]        
            if tableName == "Event":
                sql = "SELECT " + fields + " FROM " + tableName + " WHERE Event.EventType IN ('" + eventType + "') AND " + tableName + "." + sortBy + " > DateFunc('" + lastGot + "') ORDER BY " + tableName + "." + sortBy + ""
                fileName = "Event-" + eventType
            elif sortType=="None":
                sql = "SELECT " + fields + " FROM " + tableName + ""
            else:
                sql = "SELECT " + fields + " FROM " + tableName + " WHERE " + tableName + "." + sortBy + " > DateFunc('" + lastGot + "') ORDER BY " + tableName + "." + sortBy + ""
                fileName = tableName
        return f"Script: {sql}"
    

    【讨论】:

    • 这只打印文本文件中有多少个表我不打印出 sql 响应
    • 没关系,我可以让它工作,但我还有另一个问题,我要添加更多事件,这种方法会经历一次([0])我如何经历每一次发生?
    • 尝试将 resources.items 更改为 resources["Tables"] 并删除 [0]
    • 如果您只想打印查询,请更改返回打印
    【解决方案2】:

    这个问题不适合 Stack Overflow。您的代码没有具体问题。

    您可以学习here 如何在 Python 中迭代数组。

    如果您的resources 是一个“复杂”对象,那么您可能想了解dictionaries

    【讨论】:

    • 我很抱歉我应该更准确我如何遍历python中的所有表?
    • 有多种方法可以做到这一点。我会用一些链接更新我的答案。请用您的问题的明确详细信息更新您的问题。
    【解决方案3】:

    我不知道这样的问题在这里是否可以接受。

    希望对你有帮助。

    import json
    
    with open('tables.txt') as json_file:
        data = json.load(json_file)
        for p in data['Tables']:
            tableName = p['Name']
            sortBy = p['SortBy']
            lastGot = p['Last']
            fields = p['Fields']
            sortType = p['SortType']
            eventType = p['EventType']
            fileName = ""
            sql = ""
    
            if (tableName == 'Event'):
                sql = "SELECT " + fields + " FROM " + tableName + " WHERE Event.EventType IN ('" + eventType + "') AND " + tableName + "." + sortBy + " > DateFunc('" + lastGot + "') ORDER BY " + tableName + "." + sortBy + ";"
    
                fileName = "Event-" + eventType
            else:
                if (sortType == 'None'):
                    sql = "SELECT " + fields + " FROM " + tableName + ";";
                else:
                    sql = "SELECT " + fields + " FROM " + tableName + " WHERE " + tableName + "." + sortBy + " > DateFunc('" + lastGot + "') ORDER BY " + tableName + "." + sortBy + ";"
    
                fileName = tableName
    
    print(sql)
    

    【讨论】:

    • 感谢您的回复 我收到错误消息,提示 Traceback (most recent call last): line 37, in &lt;module&gt; lastGot = p['Last'] KeyError: 'Last'
    • @Xfactor 检查此键是否存在于文本文件中。
    • 它确实存在于令我难以置信的文件中
    • 您能在 pastebin 中分享其中的一部分吗? pastebin.com
    • 我正在测试代码here,它似乎工作正常。您也可以通过向文本文件中添加更多数据来检查它。
    猜你喜欢
    • 2017-05-10
    • 2023-01-13
    • 1970-01-01
    • 2021-10-24
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2013-05-25
    相关资源
    最近更新 更多