【问题标题】:Python: MySQL: Handle Illegal unquoted characters in insert statementPython:MySQL:处理插入语句中的非法未引用字符
【发布时间】:2021-10-14 23:59:10
【问题描述】:

我有 MySQL (5.6.10) 表,其中包含两列 A: varchar(255), B: text

当我运行以下命令时:

from mysql import connector as sqlserver

Database = sqlserver.connect(host=host, user=user, passwd=passwd, db=db)
Database.autocommit = True
Cursor = Database.cursor()

Cursor.execute('INSERT INTO Table (A, B) VALUES (%s, %s)',
               tuple(['This_is_a_test', '\n\nThis is a test\n\n']))

引发异常:

Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash

如果我这样做:

import json

Cursor.execute('INSERT INTO Table (A, B) VALUES (%s, %s)',
               tuple(['This_is_a_test', json.dumps('\n\nThis is a test\n\n')]))

那么就成功了,但是表中的值为:

'"\n\nThis is a test\n\n"'

代替:

'

This is a test

'

我可以手动输入值以获得正确的格式,但是你应该如何将字符串作为变量传递并让它保持正确的格式?

【问题讨论】:

    标签: json python-3.x mysql-connector


    【解决方案1】:

    我在这里找到了解决方案:https://stackoverflow.com/a/57828614/11307485

    如上所述,在字符串前添加“fr”:

    from mysql import connector as sqlserver
    
    Database = sqlserver.connect(host=host, user=user, passwd=passwd, db=db)
    Database.autocommit = True
    Cursor = Database.cursor()
    
    Cursor.execute('INSERT INTO Table (A, B) VALUES (%s, %s)',
                   tuple(['This_is_a_test', fr'\n\nThis is a test\n\n']))
    

    它不保留本机格式,但 json.dumps() 中的双引号不存在,我可以轻松解决。

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多