相关疑难解决方法(0)

sqlite3.ProgrammingError:除非使用可解释8位字节串的text_factory,否则不得使用8位字节串

在Python中使用SQLite3,我试图存储一段UTF-8 HTML代码的压缩版本.

代码如下所示:

...
c = connection.cursor()
c.execute('create table blah (cid integer primary key,html blob)')
...
c.execute('insert or ignore into blah values (?, ?)',(cid, zlib.compress(html)))
Run Code Online (Sandbox Code Playgroud)

在这一点上得到错误:

sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
Run Code Online (Sandbox Code Playgroud)

如果我使用'text'而不是'blob'并且不压缩HTML片段,那么它可以很好地工作(尽管db很大).当我使用'blob'并通过Python zlib库压缩时,我收到上面的错误消息.我环顾四周,但找不到这个简单的答案.

python sqlite unicode zlib

87
推荐指数
3
解决办法
6万
查看次数

用np.savez存储一个dict会产生意想不到的结果吗?

我可以使用np.savez存储字典吗?结果令人惊讶(至少对我来说),我找不到通过密钥获取数据的方法.

In [1]: a = {'0': {'A': array([1,2,3]), 'B': array([4,5,6])}}
In [2]: a
Out[2]: {'0': {'A': array([1, 2, 3]), 'B': array([4, 5, 6])}}

In [3]: np.savez('model.npz', **a)
In [4]: a = np.load('model.npz')
In [5]: a
Out[5]: <numpy.lib.npyio.NpzFile at 0x7fc9f8acaad0>

In [6]: a['0']
Out[6]: array({'B': array([4, 5, 6]), 'A': array([1, 2, 3])}, dtype=object)

In [7]: a['0']['B']
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-c916b98771c9> in <module>()
----> 1 a['0']['B']

ValueError: field named B not found

In [8]: dict(a['0'])
---------------------------------------------------------------------------
TypeError                                 Traceback …
Run Code Online (Sandbox Code Playgroud)

python arrays dictionary numpy save

12
推荐指数
1
解决办法
5908
查看次数

将字节数组转换回numpy数组

您可以使用.tobytes()函数将numpy数组转换为字节。

如何将其从此字节数组解码回numpy数组?我尝试过这样的形状数组(28,28)

>>k=i.tobytes()

>>np.frombuffer(k)==i

False

也尝试过使用uint8。

python numpy python-3.x

12
推荐指数
3
解决办法
9511
查看次数

使用python3将numpy整数类型插入sqlite

将numpy整数对象的值插入到python 3中的数据库的正确方法是什么?在python 2.7中,numpy数值数据类型干净地插入到sqlite中,但它们不在python 3中

import numpy as np
import sqlite3
conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE foo (id INTEGER NOT NULL, primary key (id))")
conn.execute("insert into foo values(?)", (np.int64(100),)) # <-- Fails in 3
Run Code Online (Sandbox Code Playgroud)

np.float类型在2和3中似乎仍然可以正常工作.

    conn.execute("insert into foo values(?)", (np.float64(101),))
Run Code Online (Sandbox Code Playgroud)

在python 2中,numpy标量整数数据类型不再是int的实例,甚至将整数值浮点数转换为整数.

   isinstance(np.int64(1), int)  # <- true for 2, false for python 3
Run Code Online (Sandbox Code Playgroud)

这就是dbapi无法与numpy无缝协作的原因吗?

python sqlite numpy python-3.x python-db-api

8
推荐指数
2
解决办法
1415
查看次数

在mysql中存储numpy数组

我的用例很简单,我在图像上执行了某种操作,结果特征向量是形状为rowX1000的numpy对象(我的意思是行号可以变化,但列号总是1000)

我想将这个numpy数组存储在mysql中.不对此阵列执行任何操作.给定图像名称返回整个特征向量,查询将很简单.那么有没有什么方法可以存储数组(类似于一个魔术容器,它封装了数组,然后把它放在桌子上,在检索时它检索魔术容器并弹出数组)

我想在python中这样做.如果可能支持使用短代码snippit如何将数据放入mysql数据库.

python mysql arrays numpy

7
推荐指数
1
解决办法
3785
查看次数

使用psycopg2转换器从PostgreSQL中检索bytea数据

我想以二进制(bytea)形式将Numpy数组存储在PostgreSQL数据库中.我可以在测试#1(见下文)中正常工作,但我不想在插入之前和之后选择之后操作数据数组 - 我想使用psycopg2的适配器和转换器.

这就是我现在所拥有的:

import numpy as np
import psycopg2, psycopg2.extras


def my_adapter(spectrum):
    return psycopg2.Binary(spectrum)

def my_converter(my_buffer, cursor):
    return np.frombuffer(my_buffer)


class MyBinaryTest():

    # Connection info
    user = 'postgres'
    password = 'XXXXXXXXXX'
    host = 'localhost'
    database = 'test_binary'


    def __init__(self):
        pass

    def set_up(self):

        # Set up
        connection = psycopg2.connect(host=self.host, user=self.user, password=self.password)

        connection.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)

        cursor = connection.cursor()
        try: # Clear out any old test database
            cursor.execute('drop database %s' % (self.database, ))
        except:
            pass

        cursor.execute('create database %s' % (self.database, ))
        cursor.close()
        connection.close()

        # Direct …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2

6
推荐指数
1
解决办法
7619
查看次数

更新现有 SQLite 记录中的 BLOB 字段的语法?

使用 Python 处理现有记录中的字段UPDATE的语法是什么?我创建了一个 13x13 浮点数组,并希望使用该数组更新表中的特定记录(即使用子句)。BLOBSQLiteWHERE

正确的语法是什么UPDATE

该数组具有以下形式:

[ 4.65640926e+00  5.59250259e+00  5.28963852e+00  1.60680866e+00
  -3.39492680e-01 -4.76834650e-01 -4.76834650e-01 -2.29132240e-01
   1.49733067e+00  1.51563072e+00  1.49733067e+00  9.53471420e-01
  -1.40306473e+00]

 [ 5.28963852e+00  5.34537315e+00  5.05013466e+00  1.48362923e+00
  -3.69843300e-01 -4.76834650e-01 -4.76834650e-01 -2.29132240e-01
   7.60705290e-01  1.49733067e+00  9.53471420e-01  3.05504260e-01
  -1.40306473e+00]
Run Code Online (Sandbox Code Playgroud)

总共 13 行,每行 13 个子阵列。

谢谢你,比尔

python sqlite blob sql-update

0
推荐指数
1
解决办法
4825
查看次数