当前位置: 首页 > 面试题库 >

如何使用robotframework数据库库将utf8字符插入oracle数据库

秦新立
2023-03-14
问题内容

我有一个机器人脚本,该脚本可以从sql文件中插入一些sql语句;其中一些语句包含utf8字符。如果我使用navicat工具将此文件手动插入数据库,一切都很好。但是,当我尝试使用机器人框架的数据库库执行此文件时,utf8字符会发疯!

这是我的utf8包含的sql语句:

INSERT INTO "MY_TABLE" VALUES (2, '鬲爻鬲1');

这是我使用数据库库的方式:

Connect To Database Using Custom Params     cx_Oracle   ${dbConnection}
Execute Sql Script      ${sqlFile}
Disconnect From Database

这是我在数据库中得到的:

锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 1

我尝试cx_Oracle直接使用执行SQL文件,但仍然失败!原始库中似乎有问题。这是我用于导入SQL文件的内容:

import cx_Oracle
if __name__ == "__main__":
    dsn_tns = cx_Oracle.makedsn(ip, port, sid)
    db = cx_Oracle.connect(username, password, dsn_tns)
    sql_commands = open(sql_file_addr, 'r').read().split(";")
    cr = db.cursor()
    for command in sql_commands:
        if not command in ["", "\t", "\n", "\r", "\n\r", "\r\n", None]:
            print "Executing SQL command:", command
            cr.execute(command)

    db.commit()

我发现我可以在连接字符串中定义字符集。我已经为mysql数据库完成了该任务,并且该框架成功地将UTF8字符插入了数据库;这是我的MySQL连接字符串:

database='db_name', user='db_username', password='db_password', host='db_ip', port=3306, charset='utf8'

但是我不知道如何为Oracle连接字符串定义字符集。我已经试过了:

'db_username','db_password','db_ip:1521/db_sid','utf8'

我有这个错误:

TypeError: an integer is required

问题答案:

正如@Yu
Zhang所建议的那样,我阅读了此链接中的讨论,发现要设置一个环境变量NLS_LANG才能UTF-8与数据库建立连接。因此,我在测试设置中添加了以下内容:

os.environ["NLS_LANG"] = "AMERICAN_AMERICA.AL32UTF8"


 类似资料:
  • 问题内容: 我需要将XML文件内容写入oracle数据库,其中该列是CLOB数据类型。我该怎么做? 问题答案: 过时的 请参阅下面的Lukas Eder的答案。 大约有100行代码;-) 这是一个示例 。 要点:与其他JDBC驱动程序不同,Oracle的驱动程序不支持使用和作为参数。相反,您必须先将该列然后 写入 我建议您将此代码移到辅助方法/类中。否则,它将污染其余的代码。

  • 问题内容: 我想在我的MySQL数据库中插入整数188和90,但以下代码不起作用: 为什么不起作用? 问题答案: 编辑 为我工作: 在MySQL表;

  • 问题内容: 使用JDBC驱动程序从Java中的oracle中读取oracle阿拉伯字符时遇到问题,主要问题是我找不到正确的字符编码来获取正确的数据,但是我使用此方法手动解决了问题: 此方法可以给我正确的字符,如数据库中显示的那样,但是当我尝试更新/插入阿拉伯数据时,它将保存错误的字符。例如:我的文本在数据库中另存为“ ?????????” 而不是“مرحبا”。 这是我连接到oracle数据库的方

  • 我正在尝试使用vert将BLob插入Oracle数据库。x、 我拿到上传文件了 我已使用以下方法将文件上载转换为字节数组: 现在我想直接将其插入Oracle数据库,我尝试使用,但我不知道如何将Blob添加到查询参数中。谢谢你的帮助

  • 问题内容: 我有一些每月的天气数据,我想插入到Oracle数据库表中,但是我想成批插入相应的记录,以提高效率。谁能建议我如何用Python做到这一点? 例如,假设我的表有四个字段:工作站ID,日期和两个值字段。记录由工作站ID和日期字段(复合键)唯一标识。我将为每个站点插入的值将保存在一个列表中,其中包含X整整年的数据值,因此,例如,如果有两年的值,则值列表将包含24个值。 如果我想一次插入一条记

  • 问题内容: 从Python脚本向MySQL插入一些数据时,出现一个奇怪的错误。这基本上与我要插入的变量为空有关。我认为MySQL不喜欢空白变量,但是还有其他我可以将其更改为可以与我的insert语句一起使用的东西吗? 我可以成功地使用一条语句将其设置为0(如果为空),但这可能会弄乱我计划稍后在MySQL中进行的某些数据分析。有没有办法将其转换为或某种方式,以便MySQL接受但不添加任何内容? 问题