Ubuntu MySQL python

安裝MySQL

sudo apt-get update
sudo apt-get install mysql-server mysql-client
pip install MySQL-python

若出現錯誤:EnvironmentError: mysql_config not found,安裝libmysqlclient-dev

sudo apt-get install libmysqlclient-dev
pip install MySQL-python
pip install PyMySQL

基本開啓關閉和登錄退出語法

sudo start mysql
sudo stop mysql

sudo /etc/init.d/mysql restart
sudo /etc/init.d/mysql start
sudo /etc/init.d/mysql stop

mysql -u root -p
密碼
show databases;
use basename;
show tables;
exit

[MySQL學習資源]

python連接mysql

import pymysql

conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', passwd='123456', db='tianchinew', charset='utf8')
# 創建遊標
cursor = conn.cursor()
createtablesql='create table user(id int primary key auto_increment, user_id int ,item_id int, item_category int,date date ,hour int,view int,favor int,addcar int, buy int)'
# 執行SQL,並返回收影響行數
effect_row = cursor.execute(createtablesql) 

effect_row = cursor.execute("LOAD DATA LOCAL INFILE '***.csv'  INTO TABLE user  FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES; ")

# 執行SQL,並返回受影響行數
# effect_row = cursor.execute("update tb7 set pass = '123' where nid = %s", (11,))

# 執行SQL,並返回受影響行數,執行多次
# effect_row = cursor.executemany("insert into tb7(user,pass,licnese)values(%s,%s,%s)", [("u1","u1pass","11111"),("u2","u2pass","22222")])


# 提交,不然無法保存新建或者修改的數據
conn.commit()

# 關閉遊標
cursor.close()
conn.close()

載入文件到mysql

<code class="hljs r">LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
   [REPLACE | IGNORE]
  INTO TABLE tbl_name
   [FIELDS
    [TERMINATED BY 'string']
   [[OPTIONALLY] ENCLOSED BY 'char']
   [ESCAPED BY 'char' ]
 ]
   [LINES
   [STARTING BY 'string']
  [TERMINATED BY 'string']
  ]
   [IGNORE number LINES]
  [(col_name_or_user_var,...)]
   [SET col_name = expr,...]]</code>

例如:

創建表
mysql> create table if not exists user (user_id int ,item_id int ,item_category int ,date date,hour int ,view int,favor int,addcar int,buy int)default charset=utf8;

外部數據導入表中,忽略表頭第一行,忽略第一列用@dummy
mysql>load data local infile '/home/flyvideo/PycharmProjects/ljm/tianchi_newOffline/data/user_df.csv' into table user fields terminated by ',' lines terminated by '\n' ignore 1 lines (@dummy,user_id,item_id,item_category,date,hour,view,favor,addcar,buy);

換行 Unix \n windows \r\n mac \r

遇到問題

  • 客戶端沒有導入導出權限

-mysql服務器端的文件讀寫權限是默認開啓的,但是客戶端默認關閉。修改配置文件:

sudo vim /etc/mysql/my.cnf

在mysqld和mysql下分別添加:local-infile=1

  • ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it
    MySQL默認設置的導入導出權限

該目錄沒有文件導入導出權限
1.如果secure_file_priv 的值爲空的話,這個變量將不起作用;

2.如果secure_file_priv的值爲路徑的話,則mysql服務器將限制導入導出操作功能在這個設置的路徑下使用。這個路徑必須存在。

3.如果secure_file_priv的值設置爲空的話,mysql服務器不能使用導出導入操作功能.但是,在mysql 5.7.6下是可以操作的。

查看該值的設定:
mysql>SHOW VARIABLES LIKE "secure_file_priv";
修改配置文件:
vi /etc/mysql/mysql.conf
在[mysqld]處添加:secure_file_priv=""
重啓一下mysql
  • file ’ ’ not found
    找不到文件:Ubuntu系統文件路徑沒有讀寫的權限
    要解決這個問題會扯到 AppArmor。這是一個保護機制,限制每個程序對特定目錄和文件的訪問權限。也即是說,當前 mysql 程序訪問這個文件的權限被 AppArmor 限制住了

1)打開 /etc/apparmor.d/usr.sbin.mysqld 文件
2)此時能看到很多關於mysql能夠讀寫爲目錄和文件的記錄,文件尾部加入:

#你需要增加讀取權限的目錄
/tmp/ r,
/tmp/* rw,

保存並退出。
3)重新導入 AppArmor 配置,利用 /etc/init.d/apparmor reload 命令
4)重新啓動 mysql,利用 service mysql restart

  • 還是找不到
    添加local:
load data local infile ''.....
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章