Задача, которую не выходит решить: написать на Python простейший код, который будет показывать таблицу из БД.
Исходные данные:
Файл test.sql ЭКСПОРТированный ИЗ PhpMyAdmin
Дериктория с файлом test.sql
Таблица test_table фнутри файла
Код test.sql
-- MySQL dump 10.16 Distrib 10.1.44-MariaDB, for debian-linux-gnu (i686)
--
-- Host: localhost Database: test
-- ------------------------------------------------------
-- Server version 10.1.44-MariaDB-0ubuntu0.18.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `test_table`
--
DROP TABLE IF EXISTS `test_table`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test_table` (
`iD` int(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */
--
-- Dumping data for table `test_table`
--
LOCK TABLES `test_table` WRITE;
/*!40000 ALTER TABLE `test_table` DISABLE KEYS */;
INSERT INTO `test_table` VALUES (5);
/*!40000 ALTER TABLE `test_table` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
Далее, написал на Python3 следующий скрипт:
import sqlite3
import os.path
BASE_DIR = os.path.dirname(os.path.abspath("/path/to/test.sql"))
db_path = os.path.join(BASE_DIR, "test.sql")
with sqlite3.connect(db_path) as db:
cursor = db.cursor()
cursor.execute("Select *From Test_table")
results = cursor.fetchall()
print(results)
conn.close()
Что уже сделал:
Ничего не помогло.
Как можно решить эту задачу?
Как вам уже неоднократно написали в комментариях, SQL файлы предназначены для обработки на стороне соответствующей СУБД (Система Управления Базой Данных). Т.е. SQL код выполняется непосредственно в соответствующей СУБД.
Соответственно SQL файлы невозможно выполнить / запустить из Python, не отправив SQL код на выполнение СУБД.
Для того, чтобы прочитать данные из БД при помощи Python нужно выполнить следующие операции:
SQLAlchemy
- как универсальную прослойку для работы с БД (можно обойтись и без SQLAlchemy
, но тогда код может сильно отличаться для различных СУБД)Вот вам код для чтения данных из MySQL таблицы из Python, вывода на печать и сохранение в CSV файл и Excel таблицу:
from sqlalchemy import create_engine
import pymysql
import pandas as pd
db_host = "mysql_server_hostname"
db_user = "mysql_user_name"
db_pwd = "mysql_password_for_specified_user"
db_name = "test" # MySQL database name
db_charset = "utf8mb4"
db_connection = f"mysql+pymysql://{db_user}:{db_pwd}@{db_host}/{db_name}?charset={db_charset}"
conn = create_engine(db_connection)
# читаем все строки из таблицы `mysql_table_name` в Pandas DataFrame
df = pd.read_sql("SELECT * FROM mysql_table_name", conn)
# вывод данных на экран (по умолчанию показывается максимум 15-20 строк, т.е. только первые и последние строки)
print(df)
# сохранение данных из таблицы в CSV файл
df.to_csv("/path/to/table_name.csv", index=False)
# сохранение данных из таблицы в Excel файл
df.to_excel("/path/to/table_name.xlsx", index=False)
PS для того, чтобы этот код работал правильно необходимо сначала установить используемые Python модули:
pip install pandas
pip install SQLAlchemy
pip install PyMySQL
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В базе данных есть текстовый столбец, в котором хранятся ссылки и текст:
Коллеги, необходимо организовать поиск по 16 пунктам, не закидывайте камнями, я учусь как и все вы
Нужен советСовсем скоро планирую добавить на сайт модуль по сбору информации о активности пользователя и подсчёта этой активности