当前位置: 首页 > 知识库问答 >
问题:

Python 3-CSV和cx_Oracle

裴泰平
2023-03-14

我在使用csv和cx_oracle模块时遇到了一些严重的问题。我想读取一个保存在UTF-8中的csv文件(我通过用记事本以UTF-8保存它来检查它)。我现在可以很好地阅读所有内容(在我将其保存为UTF-8之前,它没有)。这是我读取csv文件的代码:

 with open(file, 'rt', encoding='utf-8') as csvfile:
    csvinput = csv.reader(csvfile, delimiter = ',', quotechar = '"')
    for row in csvinput:
        data.append(row)

这将所有内容保存到二维阵列中。每当我想在数据库中插入内容时,我都会制作一个preparedstatement,并将文本加载到其中:

data = [lastname, firstname]
cursor = cx_Oracle.Cursor(connection)
cursor.prepare("SELECT * FROM PRIVATE WHERE NAME = :1 AND FIRSTNAME = :2")
cursor.execute(None, data)
res = cursor.fetchall()
cursor.close()

它给了我很多错误,比如:

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 1: ordinal not in range(128)

我试着通读了整本书,但我对unicode的东西感到困惑,因为我真的不知道应该在哪里使用什么以及为什么要使用它……感谢您的帮助。TLDR:我在尝试执行准备好的语句时遇到编码错误

共有1个答案

扈沛
2023-03-14

您正在尝试将Unicode值插入VARCHAR2列,该列只能处理编码的字节字符串。

cx_Oracle 正在尝试对 Unicode 值进行编码以适合列类型,并使用连接的默认编解码器执行此操作。

要么手动将您的值编码为合适的编码,要么让您的列改用NVARCHAR2

后者具有额外的优势,即列长度以字符表示,而不是以字节表示;UTF-8 数据每个字符最多可以使用 4 个字节,因此在最坏的情况下,VARCHAR2(1000) 列只能容纳 250 个实际字符。

 类似资料:
  • 问题内容: 我试图在Windows计算机上使用Python 3.2编写一个简单的CSV文件,但是我没有运气。从Python 3.2 的csv模块文档中: 产生一个文件,该文件的每一行都以字节序列结尾,因此当您使用MS Excel等打开文件时,每行看起来都有一个多余的空行。这不是“ CSV文件”。 请注意,如果我在Python 3.2中尝试相同的Python 2.7示例(最大的区别在于文件模式与vs

  • 本文向大家介绍python3读取csv和xlsx文件的实例,包括了python3读取csv和xlsx文件的实例的使用技巧和注意事项,需要的朋友参考一下 基于win10系统,python3.6 读取csv 使用csv函数包,安装 pip install csv 使用方法: 读取xlsx 使用xlrd函数包,安装: pip install xlrd 使用方法: 这两个较为常用,需要知道如何使用。 以上

  • 本文向大家介绍Python3和Python2的区别?相关面试题,主要包含被问及Python3和Python2的区别?时的应答技巧和注意事项,需要的朋友参考一下  

  • Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。 时间间隔是以秒为单位的浮点小数。 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。 Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳, 如下实例:

  • 作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。 Python有两种错误很容易辨认:语法错误和异常。 语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 >>> while True print('Hello world') File "<stdin>", line 1, in ? w

  • 在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用。 如果你希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。 如果你希