我想要3列有9个不同的值,就像Python中的列表。 这可能吗?如果不是在SQLite中,那么在另一个数据库引擎上?是否可以将值列表保存到SQLite列中?
回答
您必须通过您喜欢的方式将列表(或其他Python对象)序列化为一串字节,即“BLOB”;-)(marshal
适用于基本值列表,如数字或字符串& c, cPickle
如果你想要一个非常通用的解决方案,等等),并且当你取回它时将它反序列化。当然,这基本上携带列表(或其他Python对象)作为一个被动的“有效载荷” - 不能有意义用它WHERE
条款,ORDER BY
等
关系数据库只是不处理那么好与非原子值,并希望其他,规范化的替代品(将列表项存储在不同的表中,其中包括“listID”列,把“listID”放在你的主表中,等等)。非关系数据库虽然通常对关系数据库有限制(例如,没有连接),但可以为您的需求提供更直接的支持。
一些关系数据库确实具有非关系扩展。例如,PostGreSQL支持一个array数据类型(不像Python的列表一样普遍--PgSQL的数组在本质上是同类的)。
通常,通过对列表(使用repr())进行字符串化来完成此操作,然后保存该字符串。在从数据库读取字符串时,使用eval()重新创建列表。请注意,尽管您肯定没有用户生成的数据可以进入该列,或者eval()存在安全风险。
你的问题很难理解。这里又是:
我想要3列有9个不同的值,就像Python中的列表。可能吗?如果不是在SQLite中,那么在另一个数据库引擎上?
下面是我相信你问的是:是否有可能采取9个不同值的Python列表,并将值保存在数据库中的特定列下?
这个问题的答案是“是”。我建议使用Python ORM库而不是自己编写SQL代码。此示例代码使用Autumn:
import autumn
import autumn.util
from autumn.util import create_table
# get a database connection object
my_test_db = autumn.util.AutoConn("my_test.db")
# code to create the database table
_create_sql = """\
DROP TABLE IF EXISTS mytest;
CREATE TABLE mytest (
id INTEGER PRIMARY KEY AUTOINCREMENT,
value INTEGER NOT NULL,
UNIQUE(value)
);"""
# create the table, dropping any previous table of same name
create_table(my_test_db, _create_sql)
# create ORM class; Autumn introspects the database to find out columns
class MyTest(autumn.model.Model):
db = my_test_db
lst = [3, 6, 9, 2, 4, 8, 1, 5, 7] # list of 9 unique values
for n in lst:
row = MyTest(value=n) # create MyTest() row instance with value initialized
row.save() # write the data to the database
运行这段代码,然后退出Python和运行sqlite3 my_test.db
。然后里面的SQLite运行该SQL命令:select * from mytest;
下面是结果:
1|3
2|6
3|9
4|2
5|4
6|8
7|1
8|5
9|7
这个例子从一个列表拉值,并使用值从数据库中填充一列。它可以平凡地扩展到添加额外的列并填充它们。
如果这不是您正在寻找的答案,请更改您的请求来澄清。
P.S.本例使用autumn.util
。当前版本的“秋天”包含的setup.py
未在正确的位置安装util.py
;你需要手工完成秋季的设置。
您可以使用更成熟的ORM,如SQLAlchemy或Django的ORM。不过,我真的很喜欢Autumn,尤其是对于SQLite。
- 1. 在Monotouch中,是否可以将通用列表保存到NSUserDefaults?
- 2. 是否可以将结构存储到链接列表中?
- 3. 是否可以将列表添加到不规则列中?
- 4. 是否可以在列存储中只存储一次列值?
- 5. 是否可以将自定义元数据添加到SQLite列?
- 6. Python - 是否可以将()插入列表中的列表中?
- 7. 是否可以在boost interval_map中存储值列表?
- 8. 寻找值是否存在于LINQ列表中并将信息保存到数据集中,可能是
- 9. 是否可以将多个关系保存在一个表格列中?
- 10. 是否可以使用Angular 2将表单值保存到本地文件中?
- 11. 是否可以在SQLite表中设置列宽?
- 12. 在SQLite中查询时,是否可以将列中的值拆分为行?
- 13. 将可序列化的对象列表保存到sharedPreferences中
- 14. 是否可以将列表字典合并到一个列表中?
- 15. 是否可以将单元测试合并到列表中?
- 16. 是否可以同时将列添加到多个表中?
- 17. 将SQL列值保存到数组中
- 18. 是否可以将`integral_constant`列表转换回`T`列表?
- 19. (WPF)我可以将ItemsControl保存到列表吗?
- 20. 将大型列表存储到SQLite
- 21. 是否可以将pathparams存储为列表?
- 22. 检查列表中是否存在某个值以外的值
- 23. 是否可以将值传递给YAML列表?
- 24. 将Firebase数据保存到列表中
- 25. 如何将列表保存到spark中?
- 26. 将字符串保存到列表中
- 27. 将Sharepoint数据保存到SQLite表中
- 28. Java - 列表中的对象是否由值或引用保存?
- 29. 我可以将对象列表存储到SQLite,而不是分解列表并单独添加对象?
- 30. 在SQL中,我可以将“|”将ID列表分隔到其值的列表中?
谢谢。我想我会重新设计我的数据库以创建一个单独的表,因为我需要能够使用'WHERE'子句中的值。 – john2x 2009-10-05 09:16:30