Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在sqlite3中插入dict_Python_Sqlite - Fatal编程技术网

Python 如何在sqlite3中插入dict

Python 如何在sqlite3中插入dict,python,sqlite,Python,Sqlite,有没有办法将dict数据插入sqlite3列? 假设我有一个名为item的表,我想在名为position 我将position的数据类型指定为varchar或blob。 在这两种情况下,我都能看到 sqliter3.InterfaceError:绑定参数时出错:位置-可能是不支持的类型。 是否有任何方法可以将值{'x':2,'y':4}插入位置列?插入口述的最佳方式是什么 编辑 这里c是基于我的sqlite db上的连接的游标。与其他RDBMS不同,sqlite没有json类型(与Pythond

有没有办法将dict数据插入sqlite3列? 假设我有一个名为
item
的表,我想在名为
position

我将
position
的数据类型指定为
varchar
blob
。 在这两种情况下,我都能看到
sqliter3.InterfaceError:绑定参数时出错:位置-可能是不支持的类型。
是否有任何方法可以将值
{'x':2,'y':4}
插入
位置
列?插入口述的最佳方式是什么

编辑


这里c是基于我的sqlite db上的
连接
的游标。

与其他RDBMS不同,sqlite没有
json
类型(与Python
dict
最类似的行业格式)。因此,需要将字典转换为字符串以将对象存储在数据库表中。考虑<代码> JSON。为此,转储< /代码>:

导入json
...
列=','.join(item.keys())
占位符=':'+',:'.join(item.keys())
item['position']=json.dumps(item['position'])
query='INSERT INTO items({0})value({1})'format(列、占位符)#PYTHON 2.6+
query=f'INSERT INTO items({columns})value({placeholders})#PYTHON 3.6+
打印(查询)
#将值(:播放器,:地板,:位置,:ts)插入到项目(播放器,地板,位置,ts)中
c、 执行(查询、项目)
commit()连接

与其他RDBMS不同,SQLite没有
json
类型(与Python
dict
最类似的行业格式)。因此,需要将字典转换为字符串以将对象存储在数据库表中。考虑<代码> JSON。为此,转储< /代码>:

导入json
...
列=','.join(item.keys())
占位符=':'+',:'.join(item.keys())
item['position']=json.dumps(item['position'])
query='INSERT INTO items({0})value({1})'format(列、占位符)#PYTHON 2.6+
query=f'INSERT INTO items({columns})value({placeholders})#PYTHON 3.6+
打印(查询)
#将值(:播放器,:地板,:位置,:ts)插入到项目(播放器,地板,位置,ts)中
c、 执行(查询、项目)
commit()连接

您是否尝试将其序列化为JSON?那它就只是一根绳子。假设您希望将其存储为不透明的文本块;如果要将
x
值粘贴到一列中,将
y
值粘贴到另一列中,则需要使用不同的方法。能否显示您使用的代码。从理论上讲,您想要做的是完全可能的。在原始问题中添加了示例代码片段警告:停止使用用于字符串格式设置的模运算、
%
。在Python中,这已经被正式否决了,但还没有正式被否决。改用
str.format
(Python2.6+)或f-string(Python3.6+)。您尝试过将其序列化为JSON吗?那它就只是一根绳子。假设您希望将其存储为不透明的文本块;如果要将
x
值粘贴到一列中,将
y
值粘贴到另一列中,则需要使用不同的方法。能否显示您使用的代码。从理论上讲,您想要做的是完全可能的。在原始问题中添加了示例代码片段警告:停止使用用于字符串格式设置的模运算、
%
。在Python中,这已经被正式否决了,但还没有正式被否决。相反,请使用
str.format
(Python 2.6+)或f-string(Python 3.6+)。这不起作用,我想将此
{'player':'Mark'、'floor':'Fist'、'position':{'x':13'y':10},'ts':1429077674}
插入我的表
,与其他RDBMS不同,SQLite没有
json
dict
类型。您必须将
dict
转换为字符串以附加到数据库表。请参见编辑。这不起作用,我想将此
{'player':'Mark','floor':'Fist','position':{'x':13,'y':10},'ts':1429077674}
插入我的表
与其他RDBMS不同,SQLite没有
json
dict
类型。您必须将
dict
转换为字符串以附加到数据库表。请参见编辑。
for i in range(0, count):
        item = {
            'player': random.choice(players),
            'floor': random.choice(floors),
            'position': {
                'x': random.randint(0, 17),
                'y': random.randint(0, 10)
            },
            'ts': random.randint(ts_2015_01_01, ts_now)
        }
columns = ', '.join(item.keys())
            placeholders = ':'+', :'.join(item.keys())
            query = 'INSERT INTO items (%s) VALUES (%s)' % (columns, placeholders)
            print(query)
            c.execute(query, item)
            connection.commit()