【问题标题】:Putting values into SQL Server Database Table using PYMSSQL使用 PYMSSQL 将值放入 SQL Server 数据库表
【发布时间】:2016-07-14 18:15:42
【问题描述】:

我正在尝试将值放入 SQL Server 上的数据库表中。

我的程序将订阅一个 MQTT 服务器,当它收到一条消息时,它会将消息放入数据库的表中。

以下是我的代码:

import paho.mqtt.client as mqtt
import signal
import sys
import pymssql
from os import getenv
from time import gmtime, strftime

#Signal Handler
def signal_handler(signal, frame):
    print("\nProgram has been interrupted!")
    sys.exit(0)

#MQTT Subscribe ON_CONNECT
def on_connect(client, userdata, flags, rc):
    if str(rc) == '0':
        print ("Connected Successfully")
    else:
        print ("Connection has a problem")

    #CLIENT SUBSCRIPTION
    client.subscribe("topic1")

#MQTT Subscribe ON_MESSAGE
def on_message(client, userdata, msg):
    print("[" + msg.topic + "] " + str(msg.payload) )
    deviceID = msg.payload
    time = strftime("%Y%m%d%H%M%S", gmtime())
    #Puts the data into the SQL Server DB Table "Topic"
    cursor.execute("""
    IF OBJECT_ID('Topic', 'U') IS NOT NULL
        DROP TABLE Topic
    CREATE TABLE Topic(
        id INT NOT NULL,
        deviceID INT NOT NULL,
        dateTime INT NOT NULL,
        PRIMARY KEY(id)
    )
    """)
    cursor.execute(
        "INSERT INTO Topic VALUES (%d)",
        [(id, deviceID, time)]

    conn.commit()

#Signal Handler
signal.signal(signal.SIGINT, signal_handler)

#Connect to the SQL Server
server = 'mqtt.server.address.com'
user = 'sa'
password = 'pwd'
database = 'topics'

#SQL Server Connection Established
conn = pymssql.connect(server, user, password, database)
cursor = conn.cursor()

#Establishing MQTT Subscribe Connection
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("mqtt.server.address.com", 1883, 60)
client.loop_forever()

我一直收到以下错误:

提前感谢您的帮助。

【问题讨论】:

    标签: python mqtt pymssql


    【解决方案1】:
    1. 您应该将错误以文本形式直接发布在您的问题中。

    2. 错误清楚地表明query_params 参数应该是一个
      元组或字典而不是列表。

      cursor.execute("INSERT INTO Topic VALUES (%d)",
                     [(id, deviceID, time)])
      

      您正试图将一个包含一个元组的列表插入到单个列中。

      另请注意,您在此行中缺少结束 )

      相反,您应该单独插入每一列,并为您的参数使用一个元组:

      cursor.execute("INSERT INTO Topic VALUES (%d, %d, %d)",
                     (id, deviceID, time))
      

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多