无法在 Sqlite3 Python Django 中的数据库中插入特定数据

Posted

技术标签:

【中文标题】无法在 Sqlite3 Python Django 中的数据库中插入特定数据【英文标题】:Unable to insert specific data in database in Sqlite3 Python Django 【发布时间】:2014-04-07 18:41:33 【问题描述】:

我想在 Python 中执行这个查询:

cur=self.con.execute("insert into %s(url_id,url_name,url_title) values(%d,'%s','%s')" % (table,url_i,url_n,url_t))

在这里,我分别在 url_id、url_name 和 url_title 列中插入 url id、url name 和 url title。 id 和 url 被很好地插入,但不是 url_title。 url_title 列是空白的。

如果我们只是为了好玩,交换 url_n 和 url_t 的位置,那么问题仍然存在!我认为问题可能与 url_title 列本身有关,但这个小实验证明问题可能与 url_t 变量有关。

我们通过使用 BeautifulSoup 和 Urllib2 提取特定网页的实际 url 标题来获取 url_t 的值。如果你有兴趣,这里是函数:

def title(self,soup):
    url_title=soup.title.string
    return url_title

这将返回我要插入数据库的 url 标题。

我使用 Django 模型创建了表,我们打算在其中插入值。这是models.py文件:

class url_list(models.Model):
    url_id=models.IntegerField()            
    url_name=models.CharField(max_length=200)       
    url_title=models.CharField(max_length=200)
    def __unicode__(self):
         return self.url_name

那么,我做错了什么?

【问题讨论】:

你在解析什么html(提供链接或相关的html代码)?此外,在execute() 调用之前检查 table、url_i、url_n、url_t 变量的值。 这是我自己创建的一个简单的静态 HTML 文档。我有一组这样的文档,它们各自的 url 和 url 标题应该存储在 Db 中,这没有发生。我检查了所有值,它们似乎是正确的,但它没有被插入。这就是问题所在。 为什么要使用原始 SQL 插入而不是使用模型层? 对不起,我是这方面的新手。真的没有让你感到抱歉。 【参考方案1】:

不要乱用游标和原始 SQL,而是使用数据库 api:

from yourapp.models import url_list

new_url = url_list(url_id=url_i, url_name=url_n, url_title=url_t)
new_url.save()

【讨论】:

这可能是正确的,但现在的问题是我无法导入模型!它给出了“找不到名为 XYZ 的模块” 向我们展示您的进口声明。您是否尝试将它们导入您的 views.py 中? 不,我不是。我正在尝试将模型导入到一个通用的 python 文件中。【参考方案2】:

我找到了解决方案。如果您使用的是 Django,请参考 Burhan Khalid 解决一切问题的简单解决方案:

from yourapp.models import url_list

new_url = url_list(url_id=url_i, url_name=url_n, url_title=url_t)
new_url.save()

但是,如果您不是在模型或 Django(或两者)中工作并且涉及普通表,让我提请您注意 url_t 变量既不是字符串也不是 unicode 变量的事实。当我这样做时:

type(url_t)

我得到了 url_t 的类型,它返回了:

<class 'bs4.something'>

这是我们不想要的。

我们想要:

<type 'unicode'>

要将其转换为 unicode,只需执行以下操作:

unicode(url_t)

即使在将其转换为 unicode 之后,我也注意到问题仍然存在。然后,通过更多的实验,我做了以下事情:

url_t=str(url_t)
url_t=url_t[1:]

瞧。问题解决了。

【讨论】:

以上是关于无法在 Sqlite3 Python Django 中的数据库中插入特定数据的主要内容,如果未能解决你的问题,请参考以下文章

Django - 没有名为 _sqlite3 的模块

搭建 python 3.5+pycharm 2017.1.3+django 1.12.0 首次 将sqlite3 迁移到mysql

西游之路——python全栈——django中models配置

在 Django 中将 SQLite3 数据库迁移到 MySQL

3. 在Django 2.2中启动开发服务器时处理SQLite3错误

将 Django 数据库:SQLITE3 更改为 MARIADB