使用Python将Excel文件导入到数据库中

总结

将使用Python对Excel文件进行分析,并将其注册到数据库中。
将来会将上传到Slack特定频道的Excel文件在后台注册到数据库中。

在安装前准备好的软件包。

我要安装下述的软件包。

pip install xlrd #Excelのライブラリ
sudo apt-get install mariadb-server-10.0 #mysqlDBをインストール
apt-get install python-mysqldb #mysqldb接続用のライブラリをインストール

确认Mysql连接

由于最初没有指定密码,因此将使用Root账户进行连接。请使用以下命令确认是否可以进行连接。

pi@raspberrypi:~ $ sudo mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 44
Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> quit
Bye
pi@raspberrypi:~ $ 

使用Mysql创建数据库和账号。

我将执行以下命令来创建数据库和账户。

pi@raspberrypi:~ $ sudo mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 45
Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database excel;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create user 'pyxls'@'localhost' identified by 'pyxls';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on excel.* to pyxls@localhost;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> quit

请参考以下网站以获取详细指令内容。

创建一个数据库(使用CREATE DATABASE语句)。

创建用户(CREATE USER命令)

为用户分配权限(GRANT语句)

使用创建的帐号连接到数据库。

使用下面的命令连接到数据库,确保可以正常访问。
【关于选项】
-u 选项输入创建的用户ID。
-p 选项为创建的用户输入密码,进行指定。
*也可以在用户ID后面进行输入。
excel选项指定创建的数据库名称。
-h 选项也可用,当主机以IP指定时使用。

pi@raspberrypi:~ $ mysql -upyxls -p excel
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 46
Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [excel]> 

通过Python代码连接到数据库并显示数据库信息。

将下面的代码保存在pydb.py文件中。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb

# 接続する
conn = MySQLdb.connect(
user='pyxls',
passwd='pyxls',
host='localhost',
db='excel')

# カーソルを取得する
cur = conn.cursor()

# SQL(データベースを操作するコマンド)を実行する
# database情報を取り出す
sql = "show databases"
cur.execute(sql)

# 実行結果を取得する
rows = cur.fetchall()

# 一行ずつ表示する
for row in rows:
    print(row)

cur.close
conn.close

请参考以下网站以获取样本源代码的内容。

用Python连接MySQL的方式

将Excel数据注册到数据库的示例源代码。

我会创建Excel数据并保存在“excel.xlsx”文件中。
我将在树莓派上使用Libre Office进行创建。

image.png

2. 创建以下表格并存入DB中。

create table userlist(
name varchar(50),
gender varchar(10),
tel varchar(20)
)

执行上述SQL的界面如下所示。
*首先连接到Mysql服务器。

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 52
Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [excel]> create table userlist(
    -> name varchar(50),
    -> gender varchar(10),
    -> tel varchar(20)
    -> );
Query OK, 0 rows affected (0.05 sec)

MariaDB [excel]> 

请创建以下Python代码,并保存为pyxls.py文件。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import xlrd
import sys
import MySQLdb

# ワークブックを開き、ワークシートを定義します。
book = xlrd.open_workbook("excel.xlsx")
sheet = book.sheet_by_name("Sheet1")

# Mysqlへ接続
database = MySQLdb.connect (host="localhost", user = "pyxls", passwd = "pyxls", db = "excel", charset="utf8")

# データベースを1行ずつ走査するために使用されるカーソルを取得します。
cursor = database.cursor()

# INSERT INTO SQLクエリを作成する
query = """INSERT INTO userlist (name, gender, tel) VALUES (%s, %s, %s)"""

# XLSXファイルの各行を反復するForループを作成し、2行目からヘッダーをスキップします
for r in range(1, sheet.nrows):
    name = sheet.cell(r,0).value 
    gender = sheet.cell(r,1).value
    tel = sheet.cell(r,2).value

    # 各行から値を割り当てる
    values = (name, gender, tel)

    # SQLクエリを実行する
    cursor.execute(query, values)

# カーソルを閉じる
cursor.close()

# トランザクションをコミットします
database.commit()

# データベース接続を閉じます
database.close()

更改MySQL的字符编码

从以下的设置文件中添加一行。

pi@raspberrypi:~/work $ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
...
# this is only for the mysqld standalone daemon
[mysqld]
character-set-server = utf8 # ここの行を追加して保存します。
...
# 次のコマンドでDBを再起動します。
pi@raspberrypi:~/work $ sudo /etc/init.d/mysql restart
[ ok ] Restarting mysql (via systemctl): mysql.service.

# DBへ接続して、文字コードを確認します。
pi@raspberrypi:~/work $ mysql -upyxls -p excel
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [excel]> status
--------------
mysql  Ver 15.1 Distrib 10.0.28-MariaDB, for debian-linux-gnueabihf (armv7l) using readline 5.2

Connection id:      32
Current database:   excel
Current user:       pyxls@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server:         MariaDB
Server version:     10.0.28-MariaDB-2+b1 Raspbian testing-staging
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         1 min 4 sec

Threads: 1  Questions: 94  Slow queries: 0  Opens: 15  Flush tables: 1  Open tables: 78  Queries per second avg: 1.468
--------------

MariaDB [mysql]> quit
Bye

运行Python代码

执行以下命令。

pi@raspberrypi:~/work $ python pyxls.py

# 登録されたDBの内容を確認します。
pi@raspberrypi:~/work $ mysql -upyxls -p -hlocalhost excel
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 33
Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [excel]> show tables;
+-----------------+
| Tables_in_excel |
+-----------------+
| userlist        |
+-----------------+
1 row in set (0.00 sec)

MariaDB [excel]> select * from userlist;
+----------+----------+-----------------+
| name     | gender   | tel             |
+----------+----------+-----------------+
|  田中    |  男性    |  111-111-1111   |
|  金沢    |  男性    |  222-222-2222   |
|  鈴木    |  男性    |  333-333-3333   |
|  長澤    |  女性    |  444-4444-4444  |
|  戸田    |  女性    |  555-555-5555   |
+----------+----------+-----------------+
5 rows in set (0.00 sec)

MariaDB [excel]> 

结束

由于我还添加了环境设置的步骤,这篇文章变得越来越长了,不仅仅是Python代码。
在下一篇文章中,我想写一个将注册数据发送到电子邮件的代码。感谢您一直阅读到最后。

广告
将在 10 秒后关闭
bannerAds