向 sql 表中插入“sql 查询”

我通过将所有“插入”事件添加到名为“sqlcommand”表的单独表中来制作自动化脚本的日志。我有两个单独的表,btureading 表和 sqlcommand 表。btureading 将记录一个数字的所有输出,而 sqlcommand 将记录插入命令。


但是,我遇到了 SQL 语法错误


import mysql.connector as sql

import random as rd

from datetime import datetime

def conndev():

    conn_dev = sql.connect(

        host = 'localhost',

        user = 'root',

        passwd = '',

        auth_plugin='mysql_native_password',

        db = 'test_db'

        )

    return conn_dev


def insertsqlcommand(sql_insert):

    mydb = conndev()

    mycursor = mydb.cursor()

    insert_sql_table = "INSERT INTO sqlcommand(sqlStatement) value('" + sql_insert + "')"

    mycursor = mydb.cursor()

    mycursor.execute(insert_sql_table)

    mydb.commit()


def insertTodbMeter(myVal):

    mydb = conndev()

    mycursor = mydb.cursor()

    sql_insert = "INSERT INTO btureading(sensorId,dt,flowRate,velocity,netTotalizer)VALUES('"+myVal+"')"

    mycursor= mydb.cursor()

    mycursor.execute(sql_insert)

    mydb.commit()

    return sql_insert


ts = str(datetime.now())[0:19]

flowRate= str(rd.random())  

velocity= str(rd.random())

netTotalizer= str(rd.random())



for i in range(20):

    sample_data = str(i+1)+",'"+ts+"',"+flowRate+","+velocity+","+netTotalizer+","+posTotalizer+","+negTotalizer

    x = insertTodbMeter(sample)

    insertsqlcommand(x)


缥缈止盈
浏览 177回答 2
2回答

德玛西亚99

如果您遇到错误,请提供错误(尽可能完整的堆栈跟踪)。但是,即使没有这些,您也可能会遇到或将遇到错误处理插入的问题。sample_data = str(i+1)+",'"+ts+"',"+flowRate+","+velocity+","+netTotalizer+","+posTotalizer+","+negTotalizer此处的粗体显示您在何处添加单引号sample_data。然后您使用insertTodbMeter包含单引号的值调用,但这些值并非全部引用,这意味着这将中断:sql_insert = "INSERT INTO btureading(sensorId,dt,flowRate,velocity,netTotalizer)VALUES('"+myVal+"')"正确的方法是使用准备好的语句/参数化查询。不要尝试构建 SQL 字符串;传递您的值并让数据库库处理它。这是基于此示例的起点:def insert_to_db_meter(sensor_id, dt, flow_rate, velocity, net_totalizer):    mydb = conndev()    mycursor= mydb.cursor(prepared=True)    sql_insert = """        INSERT INTO btureading (            sensorId,            dt,            flowRate,            velocity,            netTotalizer        )        VALUES (            %s,            %s,            %s,            %s,            %s        )    """    mycursor.execute(        sql_insert,         (            sensor_id,             dt,             flow_rate,             velocity,             net_totalizer,        ),    )    mydb.commit()    return sql_insert

翻翻过去那场雪

将 sql 查询插入 sql 表参考文档https://pynative.com/python-mysql-insert-data-into-database-table/
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python