[Отвратительное резюме] Как python взаимодействует с mysql и общими операторами sql

Python

В начале сентября яpython 爬虫Интересно, но просканированные данные используются для многоканального синхронного чтения и записи в реальном времени.文件Неудобно, поэтому я начал использоватьmysql. В этой заметке я разберу самые часто используемые в реальном бою за последний месяц.mysqlзаявление, оно также будет включать в себя, какpython3нейтральныйmysqlРеализовать обмен данными.

Относительно инструментов/библиотек специальные инструкции:

1. Я установилmysql, и запустить напрямую от имени администратора命令行提示符(cmd)Проверятьmysql, ничего не устанавливалmysqlвизуальный инструмент с графическим интерфейсом.

2. ВpythonВ сценарии я используюpymysqlиsqlalchemyЭти две библиотеки связаны сmysqlустановить связь сpandasдля обработки данных.

1. Установить соединение и обмен данными

В настоящее время я использую 4 способа взаимодействия с mysql. которые запускаются от имени администратора命令行提示符(cmd)Проверятьmysql, а схему его работы можно написать в другой статье. Здесь нет места. Инструмент визуального графического интерфейса MySQL, я не использовал его в настоящее время, и мне не нужно его использовать срочно. Остальные 3 способа выполняются с помощью скриптов Python.

Сценарий A: Python вычисляет данные и хочет записать в базу данных

Сценарий Python получил большой объем табличных данных и хочет выполнить запись в базу данных за один раз. Обычно используется следующий код:

import pandas as pd
# 与 mysql 建立连接
from sqlalchemy import create_engine
conn_eng = create_engine('mysql+pymysql://username:password@localhost:3306/databasename',encoding='utf8')  

# 调用 pandas 的方法,数据写入mysql
pd.io.sql.to_sql(your_df, "table_name", conn_eng, if_exists='append',index=False)

Данные формы, я используюpandasизdataframeструктура.pd.io.sql.to_sql()Есть много других применений параметра , но вышеприведенное я использую чаще всего. Эффект такой: нет необходимости строить таблицу заранее, новая таблица будет создана автоматически. Ложка дегтя заключается в том, что свойства столбцов таблицы генерируются автоматически, что обычно нежелательно и требует проверки и изменения.

Если вы не хотите использоватьpd.io.sql.to_sql()Или, если вам нужны более сложные и сложные операции, используйте следующий сценарий C.

Сценарий B: скрипт python хочет получить данные из mysql

Если форма уже существует, и вы хотите отправить инструкцию в форму, вам нужно вернуть данные.pandasизread_sql (), возвращаемый тип данныхpandasизdataframe. Оператор sql-запроса очень легко написать, и конкретная сводка приведена ниже этой статьи.

import pymysql
# 与 mysql 建立连接
conn = pymysql.connect('localhost','username','password','databasename')
# sql 语句定义为一个字符串
sql_search = 'select question_id from topic_monitor where is_title=0 ;'
# 调用 pandas 的 read_sql() 方法拿到 dataframe 结构的数据
question_ids = pd.read_sql(sql_search,conn)
# 关闭连接
conn.close()

Сценарий C: скрипт python в одностороннем порядке отдает команды mysql, не получая данных

Если таблица уже существует, и вы хотите отправить инструкцию к таблице без возврата данных, например: создание таблицы, добавление, изменение или удаление данных, изменение имен столбцов, атрибутов столбцов и т. д., код выглядит следующим образом.

import pymysql
# 与 mysql 建立连接
conn = pymysql.connect('localhost','username','password','databasename')
cursor = conn.cursor()
# sql 语句定义为一个字符串,插入一行数据
sql_insert = 'INSERT INTO questions(q_id,q_title,q_description,q_keywords,q_people,q_pageview,time) VALUES( "'\
                + str(quesition_id) + '", "' + str(one[0])+ '", "' + str(one[1]) + '", "' + str(one[2]) + '", "' \
                + str(one[3]) + '", "' + str(one[4]) + '", "' + str(datetime.datetime.now()) + '");' 
# sql 语句定义为一个字符串,修改某个数据(另一个表格)
sql_update = 'update topic_monitor SET is_title="1" where question_id = "' + str(quesition_id) + '";'
# 提交指令
cursor.execute(sql_insert)
cursor.execute(sql_update)
conn.commit()

# 插入一行数据;仅当该数据与表格已有数据不重复时才插入,否则就不会插入
sql_insert = 'INSERT INTO `topic_monitor`(question_id,is_title,q_type,topic_id,time) SELECT "'\
                    + x[0] + '", "0", "0","'  + str(topic_id) + '", "'+ str(now) + '" FROM DUAL WHERE NOT EXISTS(\
                    SELECT question_id FROM topic_monitor WHERE question_id = "' + x[0] + '")'
cursor.execute(sql_insert)
conn.commit()

# 关闭连接
cursor.close()
conn.close()

Как видно из приведенных выше практических ситуаций,pythonиmysqlПроцесс реализации взаимодействия обычно делится на: установление соединения, определение оператора SQL в виде строки, отправку инструкции и закрытие соединения. Основной навык заключается в операторе sql; помимо определения строки оператора sql, остальные три процесса фиксируются в письменной форме.

Наиболее распространенными ошибками, которые я допускал в течение первого месяца практики, были:

  • Значения указаны без кавычек;
  • Путаница с символами: одним символом больше, одним символом меньше;
  • Тип значения не совпадает: независимо от того, является ли значение в таблице mysql числом или текстом, при определении строки оператора sql каждое значение необходимо преобразовать в строку;
  • При копировании собственного кода забудьте изменить имя базы данных.

Во-вторых, оператор sql: поисковый запрос

Поиск относится к запросу данных, которые соответствуют определенным условиям в таблице базы данных, и возврату результатов запроса. Его базовая структура такова:

SELECT 【范围】FROM table_name 【条件】;Среди них область действия должна быть указана, а условие является необязательным.

Переменная A: Область, которая относится к области возвращаемых результатов запроса.

Возвращает все поля таблицы, выраженные *:

SELECT * FROM table_name ;

image

Вернуть только поле этой таблицы:

SELECT column_name FROM table_name ;

Просто верните несколько полей таблицы:

SELECT column_name_1,column_name_3,column_name_3 FROM table_name ;

image

Вернуть только то количество данных, которое соответствует условию:

SELECT count(*) FROM table_name ;

image

Переменная B: Условие относится к тому, каким условиям должны удовлетворять возвращаемые данные.

Неограниченные условия:

SELECT * FROM table_name ;

Числовой класс: для поля (числового типа, такого как double или int) можно использовать числовые операторы сравнения, например, больше, чем>, меньше, чем<,равный=, больше или равно>=, меньше или равно<=:

image

SELECT * FROM table_name WHERE num_column_name >= 1;

Текстовый класс: поле (строковый тип, например char, text):

SELECT * FROM table_name WHERE str_column_name like “%your_str%”;

image

Также могут быть выражены несколько условий,and,orи т. д. могут использоваться для выражения отношений между условиями:

SELECT * FROM table_name WHERE num_column_name_1 >= 1 and  str_column_name like “%your_str%” ;

image

Три, оператор sql: изменить атрибуты таблицы

Целая часть данных по горизонтали называется строкой, а вся часть данных по вертикали называется столбцом. имя столбца, называемогоcolumn, что является точкой общего знания.

В реальном бою в этот период я ​​не использовал очки знаний, такие как изменение имени таблицы и сброс индекса. Чаще всего используется для работы со столбцами. Каждый столбец имеет: имя столбца, атрибуты столбца, значение столбца.

Имена столбцов, будьте осторожны, чтобы не использовать зарезервированные слова. Мой трюк, попробуйте использовать некоторые_для выражения данных, таких какarticle_title,press_dateХотя это имя немного длиннее, оно легко читается и не содержит зарезервированных слов.

Свойства столбца включают в себя: тип, максимальную длину, является ли он пустым, значение по умолчанию, повторяется ли он, является ли он индексом. Обычно непосредственно черезpandasизpd.io.sql.to_sql()При создании таблицы за один раз и сохранении данных свойства столбцов по умолчанию нежелательны. Либо заранее определите структуру таблицы и установите свойства каждого столбца, либо проверьте свойства столбца впоследствии и измените его столбец за столбцом. Таким образом, установка атрибутов и изменение столбцов являются часто встречающимися точками базовых знаний.

Значение столбца, то есть другие значения столбца, кроме имени столбца. Изменение определенного значения также является высокочастотной операцией. Но этот пункт знаний я вложил в четвертую часть.

Измените имя столбца и атрибуты столбца.Основными ключевыми словами являютсяALTER, которые можно разделить на следующие ситуации.

Сценарий A: добавьте новый столбец. Ключевые словаADD

в указанном вамиcolumn_nameСвойства столбца определяются позже.

ALTER TABLE table_name ADD COLUMN column_name char(20);

Сценарий Б. Измените имя столбца. Ключевые словаCHANGE

При изменении имени столбца вы также можете повторно указать свойства столбца.

ALTER TABLE table_name CHANGE old_column_name new_column_name char(50);

Сценарий C: изменение свойств столбца. ключевое словоMODIFY

ALTER TABLE table_name MODIFY column_name char(100);

В-четвертых, инструкция sql: добавление, изменение и удаление данных

Когда дело доходит до операций с базами данных, их обычно можно описать четырьмя словами: CRUD.

  • По вопросам смотрите вторую часть. ключевое словоSELECT.
  • Для добавления и изменения атрибутов, от которых зависят данные, см. третью часть. ключевое словоALTER.
  • Для увеличения данных также приведен пример взаимодействия с данными в первой части, поэтому повторяться не будем. ключевое словоINSERT.
  • Модификация данных, ключевое словоUPDATE.
  • Удаление данных (даже таблиц, библиотек), ключевые словаDELETE.

Модификация данных, подключевое словоset.

UPDATE table_name SET columns_name = new_value 【条件】;

Если новое значение имеет числовой тип, вы можете написать значение напрямую; если оно имеет текстовый тип, необходимо добавить двойные кавычки, например,“your_new_value”.

Если вы не пишете часть [условие], это эквивалентно изменению значения всего столбца; если вы хотите изменить определенный диапазон, вы должны использовать условное выражение, которое согласуется с предыдущей частью запроса и будет не повторяться.

Удаление данных — это операция, которая должна быть бдительна для новичков. Потому что, как только вы злоупотребите им, вы будете бессильны восстановиться. Даже профессиональные программисты могут совершать трагедии, которые, несомненно, уничтожают библиотеки. Его основное утверждение:

DELETE FROM table_name【条件】;

Если вы хотите изменить определенный диапазон, вам нужно использовать условное выражение, которое также согласуется с предыдущим разделом запроса, немного многословно: не будьте слишком уверены в условиях, которые вы устанавливаете сами, лучше проверить это с оператором поиска, а затем выполнить оператор удаления.

  • Удалить одну строку данных: добавьте условный оператор, который однозначно идентифицирует строку данных.
  • Удалить несколько строк данных: добавьте условный оператор, определяющий диапазон.
  • Удалить всю таблицу:Ты серьезно? Вы неправильно написали название формы? !Прежде чем делать эту операцию, вы должны четко подтвердить свои намерения, ведь раз уж она произошла, то уже необратима.

Если условие оставить пустым, структура таблицы сохраняется, а все строки данных удаляются. Чтобы удалить всю таблицу, ничего не оставив, выполните:

DELETE TABLE table_name;

Так называемое "удаление базы данных" заключается в удалении всей базы данных.Хотя это почти не используется в реальном бою, как новичок, вы часто делаете ошибки.Чтобы быть в безопасности на этапе практики, лучше всего создать базу данных для тренируйтесь, и удаляйте ее сразу после тренировки.Вся библиотека упражнений:

DELETE DATABASE database_name;

Если вы кратко подводите итоги прошедшего месяца, используйтеmysqlопыт, то есть: помимоmysqlУстановить и активировать слишком хлопотно, а добавление, удаление, изменение и проверка данных гораздо удобнее, чем оперировать текстом! ! Полностью стоит хлопот по установке и активации. Кроме тогоmysqlОбщая грамматика действительно проста и очень регулярна.

Надеюсь, мое резюме поможет вам. Поощряйте меня продолжать делиться, тогда, пожалуйста, поставьте лайк!