"Python Crawler 시리즈 설명"Six, Python 데이터베이스 지식

이 칼럼은 Yang Xiuzhang의 크롤러 서적 "Python Web Data Crawling and Analysis"From Beginner to Proficiency ""를 메인 라인으로, 개인 학습 및 이해를 주요 콘텐츠로, 학습 노트 형식으로 작성했습니다.
이 칼럼은 저만의 연구 및 공유 일뿐만 아니라 크롤러에 대한 지식을 대중화하고 사소한 크롤러 아이디어를 제공하고자합니다.
열 주소 : Python 웹 데이터 크롤링 및 분석 "시작에서 숙련도까지"
더 많은 크롤러 예제는 열 : Python 크롤러 슬레지 해머 테스트 를 참조하십시오.

 이전 기사 리뷰 :
"Python 크롤러 시리즈 설명"1. 네트워크 데이터 크롤링 개요
"Python 크롤러 시리즈 설명"2. Python 지식 초보자  
"Python 크롤러 시리즈 설명"3. 정규식 크롤러의 강력한 테스트  
"Python 크롤러 시리즈 설명"4. BeautifulSoup Technical
"Python Crawler 시리즈 설명"5. BeautifulSoup을 사용하여 영화 정보 크롤링


목차

MySQL 데이터베이스 1 개

1.1 MySQL 설치 및 구성

1.2 기본 SQL 문에 대한 자세한 설명

1.2.1 데이터베이스 표시

1.2.2 데이터베이스 사용

1.2.3 데이터베이스 생성

1.2.4 테이블 생성

1.2.5 테이블 정보보기

1.2.6 테이블 삭제

1.2.7 문 삽입

1.2.8 질의 문

1.2.9 업데이트 설명

1.2.10 문 삭제

2 Python 운영 MySQL 데이터베이스

2.1 MySQL 확장 라이브러리 설치

2.2 프로그램 인터페이스 DB-API

2.2.1 모듈 속성

2.2.2 링크 데이터베이스 기능

2.2.3 커서 객체

2.3 Python은 MySQLdb 확장 라이브러리를 호출합니다.

2.3.1 쿼리 데이터베이스 이름

2.3.2 쿼리 테이블

2.3.3 새 테이블

2.3.4 데이터 삽입

3 Python 운영 SQLite 3 데이터베이스

4이 기사의 요약


데이터베이스는 데이터 구조에 따라 데이터를 구성, 저장 및 관리하는웨어 하우스입니다. 데이터베이스 관리 시스템에서 사용자는 데이터 추가, 삭제, 업데이트, 쿼리 등의 작업을 수행하여 사용자가 필요로하는 다양한 데이터로 변환하고 유연한 관리를 수행 할 수 있습니다. 이전 기사에서 소개 한 Python 네트워크 데이터를 크롤링하여 얻은 코퍼스는 일반적으로 TXT 텍스트, Excel 또는 CSV 형식으로 저장됩니다.이 기사에서는 MySQL 데이터베이스에 대한 지식과 MySQL을 운영하는 Python 방법 및 저장된 데이터를 검색하는 방법에 중점을 둡니다. 데이터베이스에서 데이터 분석 및 데이터 통계가 더 편리합니다.

MySQL 데이터베이스 1 개

데이터베이스 기술은 정보 관리 시스템, 사무 자동화 시스템, 판매 통계 시스템 등 다양한 정보 시스템의 핵심 부분으로 과학 연구 및 의사 결정 관리를위한 중요한 기술적 수단입니다. 일반적으로 사용되는 데이터베이스에는 Oracle, DB2, MySQL, Server, Sybase, VF 등이 있습니다. 그중 MySQL 데이터베이스는 우수한 성능, 우수한 안정성, 간단한 구성 및 다양한 운영 체제 지원이라는 장점을 가지고 있습니다.

1.1 MySQL 설치 및 구성

MySQL의 설치 및 구성에 대해서는 다음 블로그 게시물을 참조하십시오. https://www.cnblogs.com/2020javamianshibaodian/p/mysql8020anzhuangjiaocheng.html

내러티브는 여기서 확장되지 않습니다.

1.2 기본 SQL 문에 대한 자세한 설명

데이터베이스에서 가장 중요한 것은 SQL Structure Query Language 문으로, 구조화 된 쿼리 언어이며 관계형 모델을 사용하는 데이터베이스 애플리케이션 언어입니다.

SQL 문은 주로 다음과 같이 세 가지 범주로 나뉩니다.

DDL (Data Definition Language) 문 : 데이터베이스 정의 언어. 이 문은 다른 데이터 필드, 데이터베이스, 데이터 테이블, 열 및 인덱스와 같은 데이터베이스 개체를 정의합니다. 일반적으로 사용되는 문장 키워드에는 create, drop, alter 등이 있습니다.

DML (Data Manioulation Language) 문 : 데이터베이스 작업 문. 이 문은 데이터베이스 레코드를 삽입, 삭제, 업데이트 및 쿼리하는 데 사용되며 데이터베이스 작업에서 가장 일반적으로 사용되는 문으로 데이터의 무결성을 확인할 수 있습니다. 일반적으로 사용되는 문 키워드에는 삽입, 삭제, 업데이트 및 선택이 포함됩니다.

DCL (Data Control Language) 문 : 데이터 제어 문. 이 문은 다른 데이터 필드의 권한 및 액세스 수준을 제어하고 데이터베이스, 테이블, 필드, 사용자 권한 및 보안 수준을 정의하는 데 사용됩니다. 일반적으로 사용되는 문장 키워드에는 부여, 취소 등이 있습니다.

1.2.1 데이터베이스 표시

show databases

참고 : 데이터베이스가 이미 존재하는 경우 use 문을 직접 사용할 수 있으며, 데이터베이스가없는 경우 데이터베이스를 생성하려면 create 문을 사용해야합니다.

 

1.2.2 데이터베이스 사용

기존 데이터베이스 bookmanage를 직접 사용하려면 다음 문을 직접 사용하십시오.

use bookmanage

1.2.3 데이터베이스 생성

새 데이터베이스를 만들려면 create 키워드를 사용하여 만듭니다.

create database course

1.2.4 테이블 생성

여기서 책 번호 bookid, 책 이름 bookname, 가격 가격 및 책 날짜 bookdate 필드를 포함하는 책 책 테이블을 작성한다고 가정하십시오.

create table books(bookid int primary key,
bookname varchar(20),
price float,
bookdate date
)

이 중 생성 된 테이블의 이름은 books, book 번호는 int 유형, primary key는 테이블의 필드를 고유하게 식별하는 데 사용되며, book의 이름은 varchar 유형이고 길이는 20입니다. 가격은 float 유형이고 책의 날짜는 date 유형입니다.

1.2.5 테이블 정보보기

현재 데이터베이스에 존재하는 테이블 수를 보려면 show 키워드를 사용하십시오.

show tables

위의 코드에 따르면 현재 테이블 북은 하나뿐입니다. 테이블 정의를 보려면 desc 키워드를 사용하십시오.

desc books

1.2.6 테이블 삭제

테이블 북을 삭제하려면 drop 키워드를 사용하십시오.

drop table books

1.2.7 문 삽입

데이터베이스와 테이블이 성공적으로 생성 된 후에는 테이블에 데이터를 삽입해야하며 사용되는 키워드는 insert입니다.

예를 들어, 테이블 책에 정보를 삽입하면 코드는 다음과 같습니다.

insert into books(bookid, bookname, price, bookdate) values ('1', '人工智能导论', '88', '2020-07-02')

선택 쿼리를 사용하여 결과를 표시합니다.

select * from books

 

insert 문을 실행하는 과정에서 모든 필드가 생략되면 일대일 값만 대응하면됩니다.

insert into books
value('2', '软件工程导论', '77.7', '2020-07-02')

 

마찬가지로 특정 필드에 삽입 된 데이터를 가리키는 경우 다음과 같이 동일한 방식으로 값에 대응하기 만하면됩니다.

insert into books(bookid, bookname)
value('3', 'Python程序设计语言')

 

1.2.8 질의 문

질의 문의 기본 구문 형식은 다음과 같습니다.

select 字段 from 表名 [where 条件]

이 문은 지정된 필드의 데이터를 쿼리하는 데 사용됩니다. 필드가 "*"기호 인 경우 테이블의 모든 명령어를 쿼리하는 데 사용되며 쿼리 조건 바로 뒤에 오는 경우이 매개 변수를 생략 할 수 있습니다.

장부 테이블의 모든 필드와 데이터가 표시되는 경우

select * from books

 

필수 필드를 표시하려면 쉼표로 구분할 수 있습니다.

select bookid,bookname,price from books

쿼리 조건을 늘려야하는 경우 where 문을 사용하십시오. 예를 들어 쿼리 번호가 1보다 크고 가격이 비어 있지 않습니다.

select bookid,bookname,price,bookdate from books where bookid>1;
select bookid,bookname,price,bookdate from books where price is not null;

 

1.2.9 업데이트 설명

update 문은 update 키워드를 사용합니다.

예를 들어, "인공 지능 소개"를 "네트워크 데이터 크롤링 및 분석"으로 업데이트하십시오.

update books set bookname= '网络数据爬取及分析' where bookid='1';

업데이트 문이 실행되기 전에 : 

업데이트 문이 실행 된 후 : 

 

1.2.10 문 삭제

delete 문은 delete 키워드를 사용합니다.

예를 들어, 날짜가 비어있는 데이터를 삭제하려면 특정 코드는 다음과 같습니다.

delete from books where bookdate is null;

delete 문이 실행되기 전에 : 

delete 문이 실행 된 후 : 

 

MySql이 DELETE 또는 UPDATE 명령을 실행할 때 오류 코드 : 1175를보고합니다. 안전 업데이트 모드를 사용하고 있으며 KEY 열을 사용하는 WHERE없이 테이블을 업데이트하려고했습니다. 안전 모드를 비활성화하려면 다음 옵션을 토글합니다. 기본 설정-> SQL 편집기 및 다시 연결 오류. MySql이 안전 업데이트 모드에서 실행 중이기 때문에 기본 키가 아닌 조건에서 업데이트 또는 삭제 명령을 실행할 수 없게됩니다. 다음 명령을 실행하십시오.

SET SQL_SAFE_UPDATES = 0;

데이터베이스 모드를 수정 한 후 계속해서 DELETE / UPDATE를 실행할 수 있습니다.
안전 업데이트 모드로 변경하려면 다음 명령을 실행하십시오.

SET SQL_SAFE_UPDATES = 1;

(오류 해결 출처 : 블로그 게시물 주소 참조 : https://blog.csdn.net/m2606707610/article/details/86531526 )

2 Python 운영 MySQL 데이터베이스

데이터베이스에 대한 Python 액세스에는 사용자가 액세스 할 수있는 데이터베이스 클라이언트에 대한 인터페이스를 제공하는 Python의 모듈로 이해할 수있는 해당 인터페이스 프로그램이 필요합니다.

2.1 MySQL 확장 라이브러리 설치

pip install mysql

2.2 프로그램 인터페이스 DB-API

Python 인터페이스 프로그램은 Python DB-API 사양을 준수해야합니다. DB-API는 다양한 기본 데이터베이스 시스템과 서로 다른 데이터베이스 인터페이스에 일관된 액세스 인터페이스를 제공하기 위해 일련의 필요한 작업 개체 및 데이터베이스 액세스 방법을 정의합니다. DB-API는 서로 다른 데이터베이스에 대해 일관된 액세스 인터페이스를 제공하므로 서로 다른 데이터베이스간에 코드를 쉽게 이식 할 수 있습니다.

2.2.1 모듈 속성

DB-API 모듈의 정의는 다음 표에 나와 있습니다.

DB-API 모듈
기준 치수 의미
apilevel 모듈 호환 DB-API 버전 번호
스레드 안전성 스레드 안전 수준
매개 변수 스타일 SQL 문 매개 변수 스타일 지원
잇다 링크 데이터베이스 기능

Python은 MySQL이 MySQLLdb 라이브러리를 가져와야합니다. 코드는 "import MySQLdb"입니다.

2.2.2 링크 데이터베이스 기능

데이터베이스에 연결하는 함수는 데이터베이스에 액세스하기위한 연결 객체를 생성하는 connect () 함수입니다.

connect () 함수의 매개 변수
매개 변수 영어 의미 중국어 설명
사용자 사용자 이름 데이터베이스 사용자 이름
암호 암호 데이터베이스 로그인 비밀번호
주최자 호스트 이름 데이터베이스 호스트 이름
데이터 베이스 데이터베이스 이름 데이터베이스 이름
포트 포트 데이터베이스 포트 번호, 기본값 3306
dsn 데이터 소스 이름 데이터 소스 이름

다음 코드는 Python이 MySQLdb 확장 라이브러리를 가져오고 connect () 함수를 호출하여 데이터베이스를 연결하는 것을 보여줍니다.

import MySQLdb
conn = MySQLdb.connect(host='localhost', db='MySQL', user='root', passwd='123456', port=3306, charset='utf8')
연결 개체의 일반적인 방법
방법 의미
닫기() 데이터베이스 링크를 닫거나 커서 개체를 닫습니다.
범하다() 현재 트랜잭션 커밋
롤백 () 데이터베이스에서 종종 롤백 작업이라고하는 현재 트랜잭션을 취소합니다.
커서() 커서 또는 커서와 유사한 개체 만들기
오류 처리기 (cxn, errcls, errval) 커서에 대한 핸들로

 참고 : 트랜잭션은 완전히 실행되거나 전혀 실행되지 않은 단일 논리적 작업 단위로 수행되는 일련의 작업을 의미하므로 데이터의 무결성과 보안을 보장합니다.

2.2.3 커서 객체

위 내용에서 connect () 메서드는 데이터베이스에 연결하기위한 인터페이스를 제공하는 데 사용되지만 데이터베이스에서 작업하려면 커서 개체를 사용해야합니다.

데이터베이스 커서 개체의 속성 및 방법
방법 의미
fetchone () (하나) 값을 가져옵니다. 즉, 결과 집합에서 데이터 행을 가져옵니다.
fetchmany (크기) 매개 변수 크기가 한계 인 여러 (다수) 값을 가져와 (가져오고) 결과 집합의 다음 몇 행을 가져옵니다.
fetchall () 모든 (모든) 값 가져 오기
실행 (sql) 데이터베이스 작업을 수행합니다. 매개 변수는 SQL 문입니다.
닫기() 커서를 닫습니다. 커서가 필요하지 않은 경우 가능한 한 닫습니다.

2.3 Python은 MySQLdb 확장 라이브러리를 호출합니다.

장부 관리 시스템에 장부 정보를 기록하기 위해 데이터베이스 bookmanage 및 테이블 장부가 이전에 생성되었으며이 섹션에서는 Python을 통해이를 표시하는 방법을 소개합니다.

2.3.1 쿼리 데이터베이스 이름

로컬 데이터베이스에 포함 된 데이터베이스 이름을 보려면 "show database"문을 사용하십시오.

import MySQLdb
try:
    # 访问用户 root 的本地 MySQL 数据库
    conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', port=3306)
    cur = conn.cursor()
    # 执行显示所有数据库名称的语句
    res = cur.execute('show databases')
    print(res)
    # 返回结果循环获取
    for data in cur.fetchall():
        print('%s' % data)
    cur.close()
    conn.close()
except MySQLdb.Error as e:
    print('MySQL Error %d: %s' % (e.args[0], e.args[1]))

로컬 데이터베이스가 이미 존재하지만 사용자가 데이터베이스 이름을 잊어 버린 경우 Silver Fox는이 방법을 통해 로컬 MySQL에있는 아오 한의 모든 데이터베이스를 쿼리 한 다음 데이터베이스를 연결하여 관련 작업을 수행 할 수 있습니다. 

2.3.2 쿼리 테이블

여기서 bookmanage 데이터베이스에있는 books 테이블의 내용을 쿼리해야합니다. 코드는 다음과 같습니다.

import MySQLdb
try:
    # 连接数据库
    conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', port=3306, db='bookmanage', charset='utf8')
    # cursor()函数定义游标
    cur = conn.cursor()
    res = cur.execute('select * from books')   # 执行查询操作
    print('表中含', res, '条数据\n')
    # 获取所有数据
    for data in cur.fetchall():
        print('%s %s %s %s' % data)
    cur.close()
    conn.close()
except MySQLdb.Error as e:
    print('MySQL Error %d: %s' % (e.args[0], e.args[1]))

출력 결과가 MySQL의 결과와 일치 함을 발견했습니다.

2.3.3 새 테이블

다음으로, 주로 commit () 함수를 호출하여 데이터를 제출하고 create table 문을 실행하는 student 테이블을 생성합니다. 코드는 다음과 같습니다.

import MySQLdb
try:
    conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', port=3306, db='bookmanage', charset='utf8')
    cur = conn.cursor()
    sql = "create table students(id int not null primary key auto_increment," \
                               "name char(30) not null," \
                               "sex char(20) not null)"
    cur.execute(sql)
    # 查看表
    print('插入后包含表:')
    cur.execute('show tables')
    for data in cur.fetchall():
        print('%s' % data)
    cur.close()
    conn.commit()
    conn.close()
except MySQLdb.Error as e:
    print('MySQL Error %d: %s' % (e.args[0], e.args[1]))

2.3.4 데이터 삽입

데이터 삽입은 먼저 SQL 문을 정의한 다음 execute () 함수를 호출하여 수행됩니다.

일반적으로 삽입 된 새 데이터는 드레싱을 통해 할당되어야하며 그 값은 고정되어 있지 않습니다.

import MySQLdb
try:
    conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', port=3306, db='bookmanage', charset='utf8')
    cur = conn.cursor()
    sql = "insert into students values(%s, %s, %s)"
    cur.execute(sql, ('3', 'zzr', '男'))
    # 查看表
    print('插入数据:')
    cur.execute('select * from students')
    for data in cur.fetchall():
        print('%s %s %s' % data)
    cur.close()
    conn.commit()
    conn.close()
except MySQLdb.Error as e:
    print('MySQL Error %d: %s' % (e.args[0], e.args[1]))

3 Python 운영 SQLite 3 데이터베이스

SQLite는 트랜잭션의 ACID 특성을 따르는 관계형 데이터베이스 관리 시스템 인 경량 데이터베이스입니다. 매우 적은 리소스를 차지합니다. Windows / Linux / Unix와 같은 주류 운영 체제를 지원할 수 있습니다. 또한 많은 프로그래밍 언어와 상호 작용할 수 있습니다. C3, Combine PHP, Java, Python 등

SQLite 3은 SQLite 3 모듈을 적용하여 Python과 통합됩니다. SQLite 3 모듈은 DB-API 2.0 사양과 호환되는 SQL 인터페이스를 제공합니다. Python 2.5.x 이상에는 기본적으로 자체 모듈이 있기 때문에 사용자는 SQLite 3 모듈을 직접 사용할 수 있습니다.

SQLite 3의 사용법은 이전 기사에서 소개 한 MySQLLdb 라이브러리와 유사합니다. 먼저 데이터베이스를 나타내는 연결 객체를 생성 한 다음 커서 객체를 선택적으로 생성 한 다음 SQL 문 실행을 정의하고 마지막으로 객체를 닫고 연결.

SQLite 3의 일반적인 방법
기준 치수 의미
sqlite.connect (...) SQLite 데이터베이스 파일 데이터베이스에 대한 연결 열기
connection.cursor () Python 데이터베이스 프로그래밍에 사용될 커서를 만듭니다.
cursor.execute (sql) SQL 문을 실행합니다. SQL 문을 매개 변수화 할 수 있습니다.
cursor.executescript (sql) 스크립트가 수신되면 여러 SQL 문이 실행됩니다. SQL 문은 세미콜론으로 구분해야합니다.
connection.commit () 현재 트랜잭션 커밋
connection.rollback () commit ()에 대한 마지막 호출에서 데이터베이스에 적용된 변경 사항으로 롤백
connection.close () 데이터베이스 연결 닫기
cursor.fetchone () 쿼리 결과 집합에서 다음 행을 가져오고 단일 시퀀스를 반환하고 사용 가능한 데이터가 더 이상 없을 때 None을 반환합니다.
cursor.fetchmany () 쿼리 결과 집합에서 그룹 데이터의 다음 행을 가져오고 목록을 반환합니다.
cursor.fetchall() 获取查询结果集中所有的数据行,返回一个列表

下面介绍的是 Python 操作 SQLite 3 的基础用法(与 MySQLdb 类似),主要内容包括:

  1. 在本地创建一个 test.db 的数据库文件。
  2. 执行游标中的 execute() 函数,创建表 PEOPLE,包括的字段有序号、姓名、年龄、公司和薪水,字段涉及各种数据类型。
  3. 执行插入数据操作,注意需要调用 conn.commit() 函数。
  4. 执行查询操作,SQL 语句为“"SELECT id, name, age, company, salary from PEOPLE"”,然后通过 for 循环获取查询结果,显示“小杨”、“小颜”、“小红”的信息。
  5. 执行更新操作并查询数据结果,将序号为“2”的公司信息更改为“华为”。
  6. 执行删除操作,删除公司名称为“华为”的数据,最后剩下小红的信息。
import sqlite3

# 连接数据库,如果数据库不存在则创建
conn = sqlite3.connect('test.db')
cur = conn.cursor()
print('数据库创建成功\n')

# 创建表 PEOPLE(序号、姓名、年龄、公司、薪水)
cur.execute('create table people'
            '(id int primary key not null,'
            'name text not null,'
            'age int not null,'
            'company char(50),'
            'salary real);')
print('prople 表创建成功!\n')
conn.commit()

# 插入数据
cur.execute('insert into people(id, name, age, company, salary) '
            'values(1, "小杨",26, "华为", 10000.00)');
cur.execute('insert into people(id, name, age, company, salary) '
            'values(2, "小颜",26, "百度", 8800.00)');
cur.execute('insert into people(id, name, age, company, salary) '
            'values(3, "小红",28, "腾讯", 98000.00)');
conn.commit()
print('插入数据成功!\n')

# 查询操作
cursor = cur.execute('select id, name, age, company, salary from people')
print('数据查询成功!')
print('序号', '姓名', '年龄', '公司', '薪水')
for row in cursor:
    print(row[0], row[1], row[2], row[3], row[4])
print('')

# 更新操作
cur.execute('update people set company="华为" where id=2')
conn.commit()
print('数据更新成功!')
cursor = cur.execute('select id, name, company from people')
for row in cursor:
    print(row[0], row[1], row[2])
print('')

# 删除操作
cur.execute('delete from people where company="华为";')
conn.commit()
print('数据删除成功!')
cursor = cur.execute('select id, name, company from people')
for row in cursor:
    print(row[0], row[1], row[2])
print('')

# 关闭连接
conn.close()

4 本文小结

数据库是按照数据结构来组织、存储和管理数据的仓库。用户可以通过数据库来存储和管理所需的数据,包括简单的数据表格、海量数据等。数据库被广泛应用于各行各业,比如信息管理系统、办公自动化系统、各种云信息平台等。本文为什么要介绍 Python 操作数据库知识呢?一方面,数据爬取、数据存储、数据分析、数据可视化是密不可分的 4 部分,当爬取了相关数据后,需要将其存储至数据库中,这能够更加标准化、智能化、自动化、便捷地管理数据,也为后续的数据分析提供强大的技术支持,能够自定义提取所需数据块进行分析;另一方面,数据库为实现数据共享、实现数据集中控制、保证数据的一致性和可维护性提供保障,所以,学习 Python 操作数据库是非常必要的。


欢迎留言,一起学习交流~

感谢阅读

END

추천

출처blog.csdn.net/IT_charge/article/details/107078304