ホームページ  >  記事  >  データベース  >  データはmysqlにどのように保存されますか?

データはmysqlにどのように保存されますか?

little bottle
little bottleオリジナル
2019-05-10 17:55:568384ブラウズ

mysql データベースに大量のデータを保存できることは誰もが知っていますが、mysql にデータがどのように保存されるか知っていますか?

データはmysqlにどのように保存されますか?

通常、MySQL にデータを保存するには、同期モードと非同期モードの 2 つの方法があります。

#同期モード

同期モードでは、SQL ステートメントを使用してデータをデータベースに挿入します。ただし、Scrapy の解析速度は MySQL のロギング速度よりもはるかに速いため、大量の解析が行われると MySQL のロギングがブロックされる可能性があることに注意してください。

import MySQLdbclass MysqlPipeline(object):
    def __init__(self):
        self.conn = MySQLdb.connect('127.0.0.1','root','root','article_spider',charset="utf8",use_unicode=True)
        self.cursor = self.conn.cursor()    def process_item(self, item, spider):
        insert_sql = """
            insert into jobbole_article(title,create_date,url,url_object_id) VALUES (%s,%s,%s,%s)
        """
        self.cursor.execute(insert_sql,(item["title"],item["create_date"],item["url"],item["url_object_id"]))
        self.conn.commit()

非同期モード

同期モードを使用するとブロッキングが発生する可能性があります。Twisted を使用すると、単純な実行とコミットの代わりに、MySQL のウェアハウジングと解析を非同期操作に変えることができます。同期操作。

MySQL の構成に関しては、構成ファイルでデータベースを直接構成できます。

MYSQL_HOST = "127.0.0.1"
MYSQL_DBNAME = "article_spider"
MYSQL_USER = "root"MYSQL_PASSWORD = "root"

設定の構成では、パイプラインで from_settings を定義することで設定オブジェクトを取得し、で設定構成ファイルの値を直接取得できます。

Twisted が提供する非同期コンテナを使用して MySQL に接続します:

import MySQLdb
import MySQLdb.cursorsfrom twisted.enterprise
import adbapi

adbapi を使用すると、mysqldb の一部の操作を非同期操作にできます

カーソルを使用して SQL ステートメントを実行および送信します

コード部分:

class MysqlTwistedPipline(object):
    def __init__(self,dbpool):
        self.dbpool = dbpool    @classmethod
    def from_settings(cls,settings):
        dbparms = dict(
            host = settings["MYSQL_HOST"],
            db   = settings["MYSQL_DBNAME"],
            user = settings["MYSQL_USER"],
            passwd = settings["MYSQL_PASSWORD"],
            charset = 'utf8',
            cursorclass = MySQLdb.cursors.DictCursor,
            use_unicode=True,
        )
        dbpool = adbapi.ConnectionPool("MySQLdb",**dbparms)        return cls(dbpool)    def process_item(self, item, spider):
        #使用Twisted将mysql插入变成异步执行
        #runInteraction可以将传入的函数变成异步的
        query = self.dbpool.runInteraction(self.do_insert,item)        #处理异常
        query.addErrback(self.handle_error,item,spider)    def handle_error(self,failure,item,spider):
        #处理异步插入的异常
        print(failure)    def do_insert(self,cursor,item):
        #会从dbpool取出cursor
        #执行具体的插入
        insert_sql = """
                    insert into jobbole_article(title,create_date,url,url_object_id) VALUES (%s,%s,%s,%s)
                """
        cursor.execute(insert_sql, (item["title"], item["create_date"], item["url"], item["url_object_id"]))       #拿传进的cursor进行执行,并且自动完成commit操作

do_insert を除く上記のコード部分は再利用できます。

以上がデータはmysqlにどのように保存されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。