您的位置:

python中dblink(在python中)

本文目录一览:

python3.6 cx_oracle连接数据库报编码错UnicodeDecodeError

我说下我遇到的情况

数据库字符集是 ZHS16GBK

错误的情况是

UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 12: illegal multibyte sequence

经过检查,在fetchall()获取记录时,查询到的记录里面有乱码(应该是不包含在数据库现有字符集下的字符)

临时的一个解决办法是

db=cx_Oracle.connect(dblink,encoding='UTF-8')

这样可以读取了,读取到的内容为

广州市\ue738同泰路

其中 '\ue738'应该是之前不可被读取的字符,希望对各位有帮助

python经典类和新式类为啥效率差这么多

你的测试时间差别太夸张了,肯定受到其他程序的影响,用timeit测量了一下更好。

如果all_except函数是 current != node这种,大概旧式类的对象创建和遍历加的操作是新式类对象的时间2倍。但是如果把all_except改成 while not current is node:那么旧式类对象的操作时间就比新式类少(新式类有一个descriptor的查找过程),如果给新式类增加__slots__,时间能稍微降一点,但还是比旧式类多。

所以问题应该是 != 操作没有 not is 操作高效,is操作使用了id,应该类似比较内存地址那种。而!=可能做了更多的事情。

下面是代码。

import time

class dblink:

def __init__(self,index=0):

self.index = index

self.prev = self

self.next = self

def insert(self,index):

node = dblink(index)

node.prev = self.prev

node.next = self

self.prev.next = node

self.prev = node

class nt_dblink(object):

__slots__=('index','prev','next')

def __init__(self,index=0):

self.index = index

self.prev = self

self.next = self

def insert(self,index):

node = nt_dblink(index)

node.prev = self.prev

node.next = self

self.prev.next = node

self.prev = node

def all_except(node):

current = node.next

while not current is node:

yield current

current = current.next

def test1():

head = dblink()

for i in range(100000):

head.insert(i)

for node in all_except(head):

node.index+=1

def test2():

head = nt_dblink()

for i in range(100000):

head.insert(i)

for node in all_except(head):

node.index+=1

if __name__=='__main__':

import timeit

print(timeit.timeit("test1()", setup="from __main__ import test1",number=1))

print(timeit.timeit("test2()", setup="from __main__ import test2",number=1))

如何写一段python代码,提取并保存txt里相应格式的内容?

import re

with open(input("请输入文件名:\n"), "r") as f:

    content = f.read()

with open("current_txt.txt", "w") as f:

     for t in re.findall("Accession: /dtdd(.+?)/dd", contents, re.S):

         f.write(t)