美文网首页
十四. 数据库:MySQL篇

十四. 数据库:MySQL篇

作者: 橄榄的世界 | 来源:发表于2018-03-15 10:28 被阅读0次

    MySQL可以登陆账户后安装,也可以单击“No thanks, just start my download.”直接下载,如果安装时提示requires .NET Framework4.0,请网上搜索下载后再继续安装。安装界面时选择“Developer Default”单选按钮,后面直接点Next即可。

    • 2.运行:由于MySQL安装就已经开启了服务,所以MySQL不需要用命令行来启动服务。可以在安装路径bin文件夹下打开cmd,输入以下命令,即可连接数据库。
      mysql -uroot -p123456
      若不设置密码,可以输入:mysql -uroot

    查看数据库:show database;
    打开某数据库:use XX
    查看数据库中的数据表:show tables;

    • 3.第三方库采用mysqlclient
      py -3 -m pip install mysqlclient

    • 4.实现,与sqlite3类似:
      ①创建一个供scrapy使用的数据库,取名为scrapydb,并创建数据表books;
      mysql -uroot
      CREATE DATABASE scrapydb;
      USE scrapydb;

    CREATE TABLE books(
    upc CHAR(16) NOT NULL PRIMARY KEY,
     name VARCHAR(256) NOT NULL,
     price VARCHAR(16) NOT NULL,
     review_rating INT,
     review_num INT,
     stock INT
    )ENGINE INNODB DEFAULT CHARSET=utf8;
    

    ②mysql的简单示例可以另外建立一个py文件来运行,与sqlite3几乎相同:

    # -*- coding: utf-8 -*-
    import pymysql
    
    #连接数据库,得到Connection对象
    conn = pymysql.connect(host='localhost',user='root',db='scrapydb',port=3306,charset='utf8')
    
    #创建Cursor对象,用于执行SQL语句
    cursor = conn.cursor()
    
    #创建数据表
    ##cursor.execute("CREATE TABLE person(name VARCHAR(32),age INT,sex char(1)) ENGINE INNODB DEFAULT CHARSET=utf8")
    
    #插入一条数据
    cursor.execute('INSERT INTO person VALUES(%s,%s,%s)',('李小龙',23,'M'))
    
    #保存变更,commit后数据才会实际写入数据库
    conn.commit()
    
    #关闭连接
    conn.close()
    

    ③用sqlite3已经建立的项目,在此基础上修改代码,首先是pipelines.py

    # 爬取到的数据写入到MySQL数据库
    import pymysql
    
    class MysqlPipeline(object):
    
        # 打开数据库
        def open_spider(self, spider):
            db = spider.settings.get('MYSQL_DB_NAME', 'scrapy_default')
            host = spider.settings.get('MYSQL_HOST', 'localhost')
            port = spider.settings.get('MYSQL_PORT', 3306)
            user = spider.settings.get('MYSQL_USER', 'root')
            #passwd = spider.settings.get('MYSQL_PASSWORD', '123456')
    
            self.db_conn = pymysql.connect(host=host,port=port,db=db,user=user,charset='utf8')
            self.db_cur = self.db_conn.cursor()
    
        # 关闭数据库
        def close_spider(self, spider):
            self.db_conn.commit()
            self.db_conn.close()
    
        # 对数据进行处理
        def process_item(self, item, spider):
            self.insert_db(item)
    
            return item
    
        # 插入数据
        def insert_db(self, item):
            values = (
                item['upc'],
                item['name'],
                item['price'],
                item['review_rating'],
                item['review_num'],
                item['stock']
            )
    
            sql = 'INSERT INTO books VALUES(%s,%s,%s,%s,%s,%s)'
            self.db_cur.execute(sql, values)
    

    ④settings.py

    MYSQL_DB_NAME = 'scrapydb'
    MYSQL_HOST = 'localhost'
    MYSQL_USER = 'root'
    
    ITEM_PIPELINES = {
       'books.pipelines.BooksPipeline': 300,
        # 'books.pipelines.SQLitePipeline': 400,
        'books.pipelines.MysqlPipeline': 401,
    }
    

    ⑤运行cmd命令:scrapy crawl books,用MySQL Workbench显示了1000条结果。

    MySQL管理工具也可以使用,直接下载中文版更好用:


    相关文章

      网友评论

          本文标题:十四. 数据库:MySQL篇

          本文链接:https://www.haomeiwen.com/subject/efwqqftx.html