【问题标题】:Sqlite python insert into table errorSqlite python插入表错误
【发布时间】:2016-10-04 19:47:18
【问题描述】:

这两个功能有问题 想知道人们是否可以告诉我哪里出错了 这是一个单独的功能,作为通过房价网站搜索的蜘蛛的一部分

def save_house_to_db(id, address, postcode, bedrooms):
    conn = sqlite3.connect('houses_in_london.db')
    d = conn.cursor()
    d.execute('INSERT INTO TABLE houses (id, address, postcode, bedrooms) VALUES (%d %s %s %d)' %(id, str(address), str(postcode), float(bedrooms)))
    d.commit()
    d.close()

def save_transactions_to_db(id, sale_price, date):
    conn = sqlite3.connect('houses_in_london.db')
    d = conn.cursor()
    d.execute('INSERT INTO TABLE transactions (transaction_id NOT NULL AUTO_INCREMENT, house_id, date, sale_price) VALUES'
              '(%d %s %s)' %(id, sale_price, str(date)))
    d.commit()
    d.close()

这是引发的错误:

Traceback (most recent call last):
  File "/Users/saminahbab/Documents/House_Prices/final_spider.py", line 186, in <module>
    final_function(link_set=areas,id_counter=40)
  File "/Users/s/Documents/House_Prices/final_spider.py", line 158, in final_function
    page_stripper(link=(root+page), id_counter=id_counter)
  File "/Users/s/Documents/House_Prices/final_spider.py", line 79, in page_stripper
    save_house_to_db(id=float(id_counter), address=address, postcode=postcode, bedrooms=bedrooms)
  File "/Users/s/Documents/House_Prices/final_spider.py", line 25, in save_house_to_db
    d.execute('INSERT INTO TABLE houses VALUES (%d %s %s %d)' %(id, str(address), str(postcode), float(bedrooms)))
sqlite3.OperationalError: near "TABLE": syntax error

这里参考的是数据库的执行

# conn = sqlite3.connect('houses_in_london.db')
# database = conn.cursor()
# database.execute('CREATE TABLE houses (id INTEGER PRIMARY KEY, address TEXT,'
#                  'postcode TEXT, bedrooms TEXT)')
#
# database.execute('CREATE TABLE transactions (transaction_id NOT NULL AUTO_INCREMENT, house_id INTEGER '
#                  ' REFERENCES houses(id), date TEXT, sale_price INTEGER )')

一如既往,感谢大家的支持

【问题讨论】:

  • 在插入houses 时,您是否有理由不让数据库生成整数主键,而是在插入时显式传递它们。

标签: python database sqlite


【解决方案1】:

你有很多问题:

以下函数修复了一些错误,禁止对 transactions 表进行 DDL 更正。

def save_house_to_db(id, address, postcode, bedrooms):
    conn = sqlite3.connect('houses_in_london.db')
    d = conn.cursor()
    # Remove the TABLE "keyword"
    d.execute('INSERT INTO houses (id, address, postcode, bedrooms) '
              'VALUES (?, ?, ?, ?)', (id, address, postcode, bedrooms))
    d.commit()
    d.close()

def save_transactions_to_db(id, sale_price, date):
    conn = sqlite3.connect('houses_in_london.db')
    d = conn.cursor()
    # This here expects that you've fixed the table definition as well
    d.execute('INSERT INTO transactions (house_id, date, sale_price) '
              'VALUES (?, ?, ?)', (id, sale_price, date))
    d.commit()
    d.close()

【讨论】:

  • 感谢 Lija,现在进行更正,非常感谢。我没有为房屋做自动生成器的原因是,我认为在交易表中输入交易时需要该数字作为外键,这将是最有效的方法
  • 看看here 如何通过 python sqlite3 中的游标获取最后插入的行 ID。然后,您可以让数据库生成 id 并将其用于相关的transactions
  • 谢谢 Lija,这很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多