Python - передать переменную / объект в качестве аргумента для использования в функции? - PullRequest
0 голосов
/ 15 января 2020

Я все еще учусь, поэтому, пожалуйста, прости меня, если мое фундаментальное представление о том, как это работает, далеко.

В любом случае, у меня есть две python программы. Программа 1 функционирует для подключения к БД и запуска запроса. Я хотел бы иметь возможность передать переменную из программы 2 для использования внутри функции в программе 1 ... вот так (обратите внимание на * часть запроса на обновление):

def updateSent():
    cnxn = pyodbc.connect('UID='+dbUser+';PWD='+dbPassword+';DSN='+dbHost)
    cursor = cnxn.cursor()
    update_stmt = "UPDATE WKM_sms_outbound SET status = 'sent' WHERE msg_id = ****VALUE FROM msgId****"
    cursor.execute(update_stmt)

и иметь возможность Чтобы назвать это так из другой программы:

updateSent(msgId)

Я искал вокруг, но я не думаю, что я достаточно близко с моей формулировкой, чтобы найти то, что я ищу. Спасибо заранее

РЕДАКТИРОВАТЬ: вот полный код для обоих модулей.

import pyodbc

# declare creds to login to db
dbUser="dba"
dbPassword="sql"
dbHost="Needles"
dbPort="2638"
dbConnection=None

# function to fetch/return latest sms from needles db
def pullData():
    # connect
    cnxn = pyodbc.connect('UID='+dbUser+';PWD='+dbPassword+';DSN='+dbHost)
    cursor = cnxn.cursor()

    # run query & store to dictionary
    outbound = cursor.execute("SELECT * FROM WKM_SMS_outbound ORDER BY id DESC")
    results = cursor.fetchone()
    collection = {}
    for index, outbound in enumerate(results):
        key_name = "col{0}".format(index)
        collection[key_name] = outbound

    # store desired keys/values to vars
    msg = collection['col1']
    destPhone = collection['col2']
    msgId = collection['col3']
    caseNum = collection['col4']
    sender = collection['col10']

    # close connection
    cnxn.close()

    # return desired fields for sending
    return (msg, destPhone, msgId, caseNum, sender)

def updateSent():
    cnxn = pyodbc.connect('UID='+dbUser+';PWD='+dbPassword+';DSN='+dbHost)
    cursor = cnxn.cursor()
    update_stmt = "UPDATE WKM_sms_outbound SET status = 'sent' WHERE msg_id = *********"
    cursor.execute(update_stmt)

И другой модуль:

import requests
from otherModule import pullData
from otherModule import updateSent
from datetime import datetime
from Logger import Logger

# call function from other module to pull sms
msg, destPhone, msgId, caseNum, sender = pullData()

# declare vars
msg=msg
destPhone=destPhone
sender=sender
msgId=str(msgId)

# headers and parameters required for api
headers = {
    'x-api-token': '1130FxmIcc****oCZZPCpq8ODQo',
    'x-api-key': 'pdwz0naW5hyC****nOf26BZFS28',
    'content-type': 'multipart/form-data; boundary=---'
}

formData = {
    'locationId': '2045',
    'messageBody': msg,
    'contactPhone': destPhone
}

# POST & log the sms request
Logger.writeAndPrintLine('[REQ: ' + msgId + '] ' + sender + ' to ' + destPhone, 1)

updateSent(msgId)

r=requests.post('https://api.***.com/v1/conversations/messages', headers=headers, params=formData).text

1 Ответ

0 голосов
/ 15 января 2020

Что-то вроде

def updateSent(MsgIdValue):
    cnxn = pyodbc.connect('UID='+dbUser+';PWD='+dbPassword+';DSN='+dbHost)
    cursor = cnxn.cursor()
    update_stmt = "UPDATE WKM_sms_outbound SET status = 'sent' WHERE msg_id = " + str(MsgIdValue)
    cursor.execute(update_stmt)

Смысл в том, чтобы в качестве параметра функции было указано значение MsgIdValue. Ваша строка запроса нуждается в этом значении, добавив строковую версию вашего значения.

Редактировать: кажется, у вас более одного вопроса. Это касается только одной части вопроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...