【问题标题】:Insert user defined datatype into SQLite Database using python function使用 python 函数将用户定义的数据类型插入 SQLite 数据库
【发布时间】:2022-02-10 16:25:43
【问题描述】:

所以我希望我的数据库包含我在 python 中定义的数据类型Item

class Item:
  Name = str
  L = Location #An Array
  Quantity = int
  Description = str

我用它作为数据类型制作了一个表格,我使用的 GUI 显示该列是 Item 类型:

def CreateTable(DatabaseName ,TableName):
    conn = s.connect(DatabaseName)
    print ("Opened database successfully")
    conn.execute('CREATE TABLE ' + TableName + ' (id integer, Items Item);')
    print ("Table created successfully") 
    conn.close()

既然我想插入值,所以我定义了以下函数:

def AddItemToTable(DatabaseName, TableName, Items):
  conn = s.connect(DatabaseName)
  c = conn.cursor()
  c.execute('INSERT INTO '+TableName + '(id, Items) \
  VALUES(1,'+Items+')')
  conn.commit
  conn.close()

我执行这些功能:

I = Item
CreateTable('HelloWorld.db', 'again1')
AddItemToTable('HelloWorld.db', 'again1', 'I')

创建了数据库,创建了表,它有两列,每列都有正确的类型,但它说没有列 I。如果我把 I 去掉引号,它告诉我它需要一个 @987654328 @不输入。

【问题讨论】:

  • 你试过django models
  • SQLite 中有 Item 类型吗? Docs不注明。

标签: python sql sqlite


【解决方案1】:

假设 Item 实际上是文本类型,则需要用引号将值括起来。因此,对 SQL 字符串使用双引号,对字符串文字使用单引号。

c.execute("INSERT INTO "+TableName+" (id, Items) VALUES (1,'"+Items+"')")

但实际上更好的方法是将值作为参数传递,您可以将其作为cursor.execute() 中的第二个参数,而不用担心引号括起来:

c.execute("INSERT INTO "+TableName+" (id, Items) VALUES (1, ?)", Items)

【讨论】:

  • 我不认为它是文本类型。我想传入我创建的 Item 数据类型。数据库不可能做到这一点吗?
  • 请查看我上面评论中的链接。 SQLite 3 中的 Item 数据类型在哪里?另外,您为什么要将字符串传递给该函数呢? 'I' 是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多