Python&MySQL学习笔记

一.cmd

Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>D:\
'D:\' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\Administrator>D:/
'D:/' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\Administrator>
C:\Users\Administrator>D:

D:\>cd D:\BtSoft\mysql\MySQL5.5\bin>
The syntax of the command is incorrect.

D:\>cd D:\BtSoft\mysql\MySQL5.5\bin

D:\BtSoft\mysql\MySQL5.5\bin>mysql -hlocalhost -uroot -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 61
Server version: 5.5.62-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> use mysql;
Database changed
mysql> INSERT INTO user
    -> (host, user,password,
    -> select_priv,inser_priv,update_priv)
    -> VALUES('localhost','test2',
    -> PASSWORD('123456'),'Y','Y','Y');
ERROR 1054 (42S22): Unknown column 'inser_priv' in 'field list'
mysql> INSERT INTO user
    -> (host, user,password,
    ->  select_priv,insert_priv,update_priv)
    -> VALUES('localhost','test2',
    -> PASSWORD('123456'),'Y','Y','Y');
ERROR 1062 (23000): Duplicate entry 'localhost-test2' for key 'PRIMARY'
mysql> INSERT INTO user
    -> (host, user,password,
    -> select_priv,insert_priv,update_priv)
    ->  VALUES('localhost','test3',
    -> PASSWORD('123456'),'Y','Y','Y');
Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> SELECT host, user, password FROM user WHERE user = 'test3';
+-----------+-------+-------------------------------------------+
| host      | user  | password                                  |
+-----------+-------+-------------------------------------------+
| localhost | test3 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> show grants
    -> show grants;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'show grants' at line 2
mysql> show grants for root@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> show grants for test2@'localhost';
+--------------------------------------------------------------------------------------------------------------+
| Grants for test2@localhost                                                                                   |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test2'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT ALL PRIVILEGES ON `test2`.* TO 'test2'@'localhost'                                                     |
+--------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>

 

二.如何使用python把csv文件导入MySQL库

注:这种方法可在同个文件夹下放多个csv文件,这里只用一个文件来弄

csv文件来源:https://www.citibikenyc.com/system-data/

 

1.向数据库daiguoxi_test创建数据表

# -*- coding: utf-8 -*-
import pymysql

# 1.链接数据库
db = pymysql.connect(
      host='127.0.0.1',
      port=3306,
      user='test2',
      passwd='123456',
      db='daiguoxi_test',
      charset='utf8')
# 建立链接游标
cursor = db.cursor()
print ('>> 已连接数据表,处理中...')

# 2.添加数据库表头(创建的字段,不要使用空格)
sql = '''CREATE TABLE IF NOT EXISTS daiguoxi_test (
        `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `tripduration` CHAR(10),
        `starttime` CHAR(30),
        `stoptime` CHAR(30),
        `start_station_id` CHAR(10),
        `start_station_name` CHAR(60),
        `start_station_latitude` CHAR(20),
        `start_station_longitude` CHAR(20),
        `end_station_id` CHAR(10),
        `end_station_name` CHAR(60),
        `end_station_latitude` CHAR(20),
        `end_station_longitude` CHAR(20),
        `bikeid` CHAR(10),
        `usertype` CHAR(15),
        `birth_year` CHAR(10),
        `gender` CHAR(2)        
        )'''
cursor.execute(sql)

# 3.提交并关闭链接
cursor.close()
db.close()
print ('>> Done.') 

运行结果:

>> 已连接数据表,处理中...
>> Done.
[Finished in 2.2s]

  

2. 先读取指定目录的所有CSV文件,然后逐个读取并逐条写入MySQL

# -*- coding: utf-8 -*-
import pymysql,time
import glob,os
import pandas as pd

# 1.准备,指定目录
time_start = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 记录当前时间
print('>> 当前时间:',time_start)
print('>> 开始处理……')
filelocation = r"C:/Users/Administrator/Desktop/作业和实验/代码文件/mysql/"

# 2.链接数据库
print('>> 连接MySQL...')
db = pymysql.connect(
      host='127.0.0.1',
      port=3306,
      user='test2',
      passwd='123456',
      db='daiguoxi_test',
      charset='utf8')
# 建立链接游标
cursor = db.cursor()
print ('>> 已连接数据表。')

# 3.查看本地新文件名
filenames=[]
os.chdir(filelocation) #指定目录
for i in glob.glob("*.csv"): # 获取指定目标下所有的CSV文件名
    filenames.append(i[:-4]) # 文件名不包含“.csv”
count = len(filenames)
print('>> 本地文件:',count,'个') # 如下是以“Num.**”为序号打印出每个文件名
for i in range(0,count): # 把0-9的数字用0补齐2位,也可以用zfill函数或者format格式化实现
    if i<9:
        ii = i+1
        ij = '0'+str(ii)
    else:
        ij = i+1
    print(' - Num.', end='')
    print(ij, filenames[i])

# 4.把新文件的数据提交mysql
print('>> 读取中...')
# MySQL语句
insert_sql = 'insert into daiguoxi_test (tripduration,starttime,stoptime,start_station_id,start_station_name,start_station_latitude,start_station_longitude,end_station_id,end_station_name,end_station_latitude,end_station_longitude,bikeid,usertype,birth_year,gender) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'
# 开始逐个文件处理
for file_name in filenames:
    print(" + 正在处理:", file_name,'(第',filenames.index(file_name)+1,'个)')
    time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 记录处理每个文件的时间
    print(' - 当前时间:', time_now)
    data_csv = pd.read_csv(open(filelocation + file_name+'.csv')) # 使用Pandas读取数据文件
    # print(data_csv.head(3)) # 查看前3条数据
    # print(data_csv.info()) # 查看数据表信息
    # print(len(data_csv.index)) # 查看数据量
    # print(data_csv.loc[2].values) # 查看指定某一行的数据
    ii = 0 # 用于统计每个文件的数据量
    for i in range(0,data_csv.shape[0]): # 逐行读取
        row = data_csv.loc[i].values # 获取第i行数据
        # print(i,'>>:',data_csv.loc[i].values) # 打印第i行数据
        cursor.execute(insert_sql, (str(row[0]), str(row[1]), str(row[2]), str(row[3]), str(row[4]), str(row[5]), str(row[6]), str(row[7]),
        str(row[8]), str(row[9]), str(row[10]), str(row[11]), str(row[12]), str(row[13]), str(row[14])))
        ii = i + 1
    print(' - 提交数量:',ii,'条')

# 5.结束
db.commit() # 提交记录
db.close() # 关闭db
cursor.close() # 关闭游标
time_finish = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 记录当前时间
print('>> 当前时间:',time_finish)
print('\n',end='')
print('>> Done.') #完毕

  

运行结果:

>> 当前时间: 2020-05-26 11:51:53
>> 开始处理……
>> 连接MySQL...
>> 已连接数据表。
>> 本地文件: 1 个
 - Num.01 201501-citibike-tripdata
>> 读取中...
 + 正在处理: 201501-citibike-tripdata (第 1 个)
 - 当前时间: 2020-05-26 11:51:53
 - 提交数量: 285552 条
>> 当前时间: 2020-05-26 11:56:12

>> Done.
[Finished in 259.7s]

  

3.在SQLyog上查看MySQL中的daiguoxi_test数据库中的数据

猜你喜欢

转载自www.cnblogs.com/yeu4h3uh2/p/12964693.html