Wir alle wissen, dass die MySQL-Datenbank große Datenmengen speichern kann, aber wissen Sie, wie Daten in MySQL gespeichert werden?
Im Allgemeinen gibt es zwei Möglichkeiten, Daten in MySQL zu speichern: den synchronen Modus und den asynchronen Modus.
Synchronisationsmodus
Der Synchronisationsmodus verwendet SQL-Anweisungen, um Daten in die Datenbank einzufügen. Es ist jedoch zu beachten, dass die Analysegeschwindigkeit von Scrapy viel schneller ist als die Protokollierungsgeschwindigkeit von MySQL. Bei einer großen Analysemenge kann die Protokollierung von MySQL blockiert werden.
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()
Asynchroner Modus
Die Verwendung des synchronen Modus kann zu Blockierungen führen. Wir können Twisted verwenden, um MySQLs Warehousing und Parsing in asynchrone Vorgänge umzuwandeln, anstatt sie einfach auszuführen und festzuschreiben synchrone Operationen.
Was die Konfiguration von MySQL betrifft, können wir die Datenbank direkt in der Konfigurationsdatei konfigurieren:
MYSQL_HOST = "127.0.0.1" MYSQL_DBNAME = "article_spider" MYSQL_USER = "root"MYSQL_PASSWORD = "root"
Für die Konfiguration in den Einstellungen erhalten wir das Einstellungsobjekt, indem wir from_settings in der Pipeline definieren, und wir Sie können den Wert der Einstellungskonfigurationsdatei direkt in abrufen.
Verwenden Sie den von Twisted bereitgestellten asynchronen Container, um eine Verbindung zu MySQL herzustellen:
import MySQLdb import MySQLdb.cursorsfrom twisted.enterprise import adbapi
Die Verwendung von adbapi kann einige Vorgänge von mysqldb asynchron machen.
Verwenden Sie Cursor, um SQL-Anweisungen auszuführen und zu senden.
Codeteil:
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操作
Der obige Codeteil, mit Ausnahme von do_insert, kann wiederverwendet werden.
Das obige ist der detaillierte Inhalt vonWie werden Daten in MySQL gespeichert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!