无法在 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 中的数据库中插入特定数据的主要内容,如果未能解决你的问题,请参考以下文章
搭建 python 3.5+pycharm 2017.1.3+django 1.12.0 首次 将sqlite3 迁移到mysql
西游之路——python全栈——django中models配置
在 Django 中将 SQLite3 数据库迁移到 MySQL