使用Scrapy获取一些东西,我想将它存储在数据库中。之前从来没有用MySQL或Python做任何事情,所以寻找一些帮助,为什么这将无法正常工作。Python添加到MySQL数据库
这里是我的代码:
from __future__ import print_function
from metacritic.items import MetacriticItem
from mysql.connector import errorcode
import mysql.connector
import json
class MetacriticPipeline(object):
DB_NAME = 'metacritic'
TABLES = {}
TABLES['titles'] = (
"CREATE TABLE `titles` ("
" `name` varchar (14) NOT NULL,"
" PRIMARY KEY (`emp_no`)"
") ENGINE=InnoDB")
cnx = mysql.connector.connect(user='root', password = 'andy')
cursor = cnx.cursor()
def process_item(self, item, spider):
if item['title']:
return item
class JsonWriterPipeline(object):
def __init__(self):
self.file = open('items.jl', 'wb')
def process_item(self, item, spider):
line = json.dumps(dict(item)) + "\n"
self.file.write(line)
return item
class WriteToDatabasePipeline(object):
def create_database(cursor):
try:
cursor.execute(
"CREATE DATABASE {} DEFAULT CHARACTER SET 'utf8'".format(DB_NAME))
except mysql.connector.Error as err:
print("Failed creating database: {}".format(err))
exit(1)
try:
cnx.database = DB_NAME
except mysql.connector.Error as err:
if err.errno == errorcode.ER_BAD_DB_ERROR:
create_database(cursor)
cnx.database = DB_NAME
else:
print(err)
exit(1)
当我尝试运行它,我得到的CMD此错误:
File "metacritic\pipelines.py", line 46, in WriteToDatabasePipeline
cnx.database = DB_NAME
NameError: name 'DB_NAME' is not defined
任何想法,这是为什么?它在我看来像DB_NAME被定义好吗?我只想制作数据库,然后尝试添加表格。 感谢您的帮助
真棒工作非常感谢:) – AndyOHart