我的python代码没有将数据插入数据库。我不知道为什么?

时间:2016-08-27 05:13:24

标签: python sql database sqlite

我的代码只是创建一个存储链接的数据库。但由于某些原因,当我打开数据库时,它是一个空表。我不知道为什么会这样。

不会造成任何麻烦

#!/usr/bin/python
import urllib2
from BeautifulSoup import *
import sqlite3

count = 0
ecount = 0
aj = list()
error = list()
run = 1

sql connect

conn = sqlite3.connect('example.db')
cur = conn.cursor()
sql = '''CREATE TABLE URL (LINKS CHAR(512), ID INT(512))'''
cur.execute(sql)

不会造成任何麻烦

def retriver(durl):
    newurl = list()
    url = durl
    notpar = {"#", "None", "NONE", "javascript:void(0)"}


    hl = urllib2.urlopen(url, None)
    html = hl.read()
    hl.close()
    soup = BeautifulSoup(html)
    tags = soup('a')

这是刮刀

    for tag in tags:
        new = tag.get('href', None)
        newurl.append(new)
        for i in newurl:
            try:
                if i[0] == "/" and i[0:3] != "www":
                    if i[len(a)] == "/":
                        i = url[0:len(url)-1] + i
                    else:
                        i = url + i
                if i[0:3] == "www":
                    i = "/" + i
                if "." not in list(i):
                    continue
                if i[0] == "/":
                    i = i[1:len(i)]
                if i[0:4] != "http":
                    if i[len(i)] != "/":
                        i = "/" + i

这就是问题出现的地方

                if i not in aj:
                    if i not in notpar:
                        aj.append(i)
                        print i
                        count += 1
                        sql = '''INSERT INTO URL(LINKS, ID) VALUES (%s, %d)'''
                        sqldata = (i, count)
                        cur.execute(sql, sqldata)
                        conn.commit()
            except:
                error.append(i)
                ecount += 1
                global ecount
    global count
    global aj

u = raw_input('Enter the url :: ')
aj.append(u)
retriver(u)

不会造成任何麻烦

while True:

    try:
        retriver(aj[run])
        run += 1
        if run > 20:
            break
        print run
    except:
        run += 1
        retriver(aj[run])
        print run

2 个答案:

答案 0 :(得分:1)

在这一行:

sql = '''INSERT INTO URL(LINKS, ID) VALUES (%s, %d)'''

尝试将其更改为:

sql = '''INSERT INTO URL(LINKS, ID) VALUES (?, ?)'''

此帖子here引用数据库的参数替换API使用而不是%s %d 符号。

答案 1 :(得分:0)

我认为你不应该使用像sql = '''INSERT INTO URL(LINKS, ID) VALUES (%s, %d)'''

这样的查询

要在查询中直接插入变量,请使用以下格式字符串:

sql = cur.execute("INSERT INTO URL(LINKS, ID) VALUES (?,?)",(x,y))