Python-解决Cx_Oracle查询时UnicodeDecodeError的问题
近期在项目中,要对1张100多万条记录的表进行查询,然后进行一些数据的统计,但是在这个过程中,发现只查询出来几条数据就出现了UnicodeDecodeError了。
在这里,我们使用sqlalchemy库进行查询,其内部还是Cx_Oracle来进行对应的操作,使用的Python版本为3.5.0,宿主系统为Windows 2008 Server,然后进行类似如下的操作:
from sqlalchemy import create_engine engine = create_engine('oracle://demo:123456@192.168.1.202/TEST') conn = engine.connect() sql = 'select t.type from TS t' result = conn.execute(sql) for row in result: print(row['type'])
在这里,我们首先创建1个到数据库的连接,然后进行对应的查询操作。很不幸的是,只查询不到10条记录就出现了1个UnicodeDecodeError错误了。
本来以为是数据库的服务器编码问题,因此在create_engine函数中追加了encoding参数,将其更改为:
engine = create_engine('oracle://demo:123456@192.168.1.202/TEST',encoding="UTF-8")
而另外1种可用的方式直接在连接路径中指定编码,类似如下:
engine = create_engine('oracle://demo:123456@192.168.1.202/TEST?charset=utf-8')
但是问题还是没有解决。在网上搜索了一下都没有找到适应的解决方案,突然想起来之前在使用Mysql数据库(个人喜欢Postgresql多一些)的时候,出现乱码的时候,我们常常会进行如下的操作:
set names gbk;
我们通过这种方式设置客户端的编码,而不是服务器端的编码,来解决终端下出现乱码的情况(由于Postgresql默认数据库就是UTF-8因此出现乱码的可能性较低)。而另外在Linux下安装Oracle的客户端时,设置了1个NLS_LANG
的环境变量,详情可以参考Ubuntu14.04安装Oracle Instant Client这篇文章,当然这篇文章有一些细节的东西没有介绍。
一般情况下,我们在cmd中进行如下的设置:
setenv NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
我们指定Oracle消息使用的语言为简体中文,而客户端的字符集为GBK。
另外,我们还可以执行如下的语句来确保上述的操作是正确的:
SELECT * FROM v$nls_parameters;
由于上述数据库服务器是部署在Windows上的,因此其结果自然为GBK,因此如果我们客户端使用UTF8字符集进行解码,自然而言会出现解码的错误。
我们需要注意的是,只有在数据库服务器端与客户端的编码一致的情况下,我们才能正常的显示非ASCII编码,而在sqlalchemy中默认会将查询的字符串强制将其转换为Unicode。因此类似Python3的如下过程:
>>> a='中国'.encode('gbk') >>> a b'\xd6\xd0\xb9\xfa'
而在sqlalchemy中由于强制进行编码转换,因此类似执行如下的过程:
>>> a.decode('utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte
因此就出现上述的问题了。而正常的情况应该指定其编码为GBK:
>>> a.decode('gbk') '中国'
而设定NLS_LANG
就是相当于修改上述的编码为GBK。
更多Python-解决Cx_Oracle查询时UnicodeDecodeError的问题 相关文章请关注PHP中文网!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam kod VS, anda boleh menjalankan program di terminal melalui langkah -langkah berikut: Sediakan kod dan buka terminal bersepadu untuk memastikan bahawa direktori kod selaras dengan direktori kerja terminal. Pilih arahan Run mengikut bahasa pengaturcaraan (seperti python python your_file_name.py) untuk memeriksa sama ada ia berjalan dengan jayanya dan menyelesaikan kesilapan. Gunakan debugger untuk meningkatkan kecekapan debug.

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Sambungan kod VS menimbulkan risiko yang berniat jahat, seperti menyembunyikan kod jahat, mengeksploitasi kelemahan, dan melancap sebagai sambungan yang sah. Kaedah untuk mengenal pasti sambungan yang berniat jahat termasuk: memeriksa penerbit, membaca komen, memeriksa kod, dan memasang dengan berhati -hati. Langkah -langkah keselamatan juga termasuk: kesedaran keselamatan, tabiat yang baik, kemas kini tetap dan perisian antivirus.

VS Kod adalah nama penuh Visual Studio Code, yang merupakan editor kod dan persekitaran pembangunan yang dibangunkan oleh Microsoft. Ia menyokong pelbagai bahasa pengaturcaraan dan menyediakan penonjolan sintaks, penyiapan automatik kod, coretan kod dan arahan pintar untuk meningkatkan kecekapan pembangunan. Melalui ekosistem lanjutan yang kaya, pengguna boleh menambah sambungan kepada keperluan dan bahasa tertentu, seperti debuggers, alat pemformatan kod, dan integrasi Git. VS Kod juga termasuk debugger intuitif yang membantu dengan cepat mencari dan menyelesaikan pepijat dalam kod anda.

Kod VS boleh dijalankan pada Windows 8, tetapi pengalaman mungkin tidak hebat. Mula -mula pastikan sistem telah dikemas kini ke patch terkini, kemudian muat turun pakej pemasangan kod VS yang sepadan dengan seni bina sistem dan pasangnya seperti yang diminta. Selepas pemasangan, sedar bahawa beberapa sambungan mungkin tidak sesuai dengan Windows 8 dan perlu mencari sambungan alternatif atau menggunakan sistem Windows yang lebih baru dalam mesin maya. Pasang sambungan yang diperlukan untuk memeriksa sama ada ia berfungsi dengan betul. Walaupun kod VS boleh dilaksanakan pada Windows 8, disyorkan untuk menaik taraf ke sistem Windows yang lebih baru untuk pengalaman dan keselamatan pembangunan yang lebih baik.

MongoDB sesuai untuk mengendalikan data tidak berstruktur berskala besar, dan Oracle sesuai untuk aplikasi peringkat perusahaan yang memerlukan konsistensi transaksi. 1.MongoDB menyediakan fleksibiliti dan prestasi tinggi, sesuai untuk memproses data tingkah laku pengguna. 2. Oracle terkenal dengan kestabilan dan fungsi yang kuat dan sesuai untuk sistem kewangan. 3.MongoDB menggunakan model dokumen, dan Oracle menggunakan model hubungan. 4.MongoDB sesuai untuk aplikasi media sosial, sementara Oracle sesuai untuk aplikasi peringkat perusahaan.

Masalah yang paling biasa "tidak dapat menjalankan python" berpunca daripada kesilapan jalur penterjemah python. Penyelesaian termasuk: mengesahkan pemasangan python, mengkonfigurasi kod VS, dan menggunakan persekitaran maya. Di samping itu, terdapat teknik debugging yang cekap dan amalan terbaik seperti debugging breakpoint, pemantauan berubah -ubah, output log, dan pemformatan kod, seperti mengasingkan kebergantungan menggunakan persekitaran maya, pelaksanaan kod penjejakan menggunakan titik putus, dan mengesan perubahan berubah -ubah dalam masa nyata menggunakan ekspresi pemantauan, dan lain -lain, yang dapat meningkatkan kecekapan pembangunan.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.
