为了账号安全,请及时绑定邮箱和手机立即绑定

向 sql 表中插入“sql 查询”

向 sql 表中插入“sql 查询”

缥缈止盈 2022-01-18 15:39:52
我通过将所有“插入”事件添加到名为“sqlcommand”表的单独表中来制作自动化脚本的日志。我有两个单独的表,btureading 表和 sqlcommand 表。btureading 将记录一个数字的所有输出,而 sqlcommand 将记录插入命令。但是,我遇到了 SQL 语法错误import mysql.connector as sqlimport random as rdfrom datetime import datetimedef conndev():    conn_dev = sql.connect(        host = 'localhost',        user = 'root',        passwd = '',        auth_plugin='mysql_native_password',        db = 'test_db'        )    return conn_devdef 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_insertts = 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)
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

如果您遇到错误,请提供错误(尽可能完整的堆栈跟踪)。但是,即使没有这些,您也可能会遇到或将遇到错误处理插入的问题。


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


查看完整回答
反对 回复 2022-01-18
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信