遠程和Ubuntu服務器進行Socket通信,使用python和C#(准備篇)


  服務器在阿里雲上,和一般的本地配置方案不太一樣,所以網上的博客里沒有解決辦法,本人在這里記錄一下,方便大家交流。

  由於數據要保存到MySQL數據庫中,使用python對數據進行操作,爬到數據直接進行保存。上一篇博客里已經講過安裝python時需要注意的一個小問題,這篇博客主要講MySQL的安裝配置和python連接數據庫的一個小問題(坑)。

1. 安裝和配置MySQL

  MySQL的安裝很簡單,用命令行apt-get即可。這個網上博客很多就不贅述。重點是安裝后的配置,為了支持中文需要修改兩處配置文件。(如果已經保存過數據在里面,那修改起來就很繁瑣,所以一步到位,提前改好。)

  1. 在文件/etc/mysql/conf.d/mysql.cnf 下加一行:default-character-set=utf8,然后保存,完整截圖:

                         

  2. 在文件/etc/mysql/mysql.conf.d/mysqld.cnf 中間部分,Basic Settings里加 character-set-server=utf8,然后保存,截圖:

                        

  然后重啟MySQL,命令行里輸入:

  1 service mysql restart 

  用root用戶登錄MySQL,使用SQL語句查看:

  1 show variables like '%char%';

                    

  如果是這樣證明修改成功。接下來使用命令創建一個數據庫、表、新用戶,來供python連接數據庫使用:

  1 create database basename;    # basename是想創建的數據庫名稱
  2 use basebname;    # 進入這個新建的數據庫
  3 create table tablename(ID varchar(30) not null, Address varchar(70), primary key(ID));    #在里面新建一個表含兩列,ID和Adress,ID不能為空,主鍵設置為ID
  4 grant all privileges on basename.tablename to user01@"%" identfied by "password";
  5 flush privileges;    # 更新權限使得其生效

  上面第四句是新建一個名為user01的用戶,在basename里的tablename表里有所有的權限,@"%"表示可以在任何地方訪問以密碼password訪問,換成@"localhost"表示只能在本地訪問。而查看哪些用戶具有哪些權限的語句是:

  1 select user, host from mysql.user;    # 查看所有用戶名和他們的訪問位置
  2 show grants for user01@"%";    # 查看user01用戶的所有權限

  我們知道權限控制是很重要的,如果給錯權限可以撤銷:

  1 revoke create,drop on basename.tablename to user01@"%";    # 撤銷用戶創建和刪除的權限
  2 flush privileges;  # 更新權限

2. Python連接MySQL

   Python3使用PyMySQL來操作MySQL,Python2使用MySQLdb。這里安裝PyMySQL。

  1 pip install pymysql

  接下來給出一個簡短的例子說明使用方法:

   1 import pymysql.cursors
   2
   3 # 連接數據庫
   4 connection = pymysql.connect(host='要連接的IP',
   5                              user='user',
   6                              password='passwd',
   7                              db='db',# 要連接的數據庫
   8                              charset='utf8mb4',
   9                              cursorclass=pymysql.cursors.DictCursor)
  10 
  11 try:
  12     with connection.cursor() as cursor:
  13         # 寫一個插入語句,向user這個表插入一條記錄
  14         sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"  # 
  15         cursor.execute(sql)
  16 
  17     # 最后提交一下變更
  18     connection.commit()
  19 
  20     with connection.cursor() as cursor:
  21         # 查詢一條記錄,也可以用fetchall查詢所有滿足條件的記錄
  22         sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
  23         cursor.execute(sql)
  24         result = cursor.fetchone()
  25         print(result)
  26 finally:
  27     connection.close()

  看似一切正常,work well,但是在運行自己構造sql語句的時候始終報錯:

  1 sql = "update "+tablename+" set Address="+info['ad']+" where ID like "+id[1]
  2 pymysql.err.InternalError: (1054, "Unknown column 'Address' in 'field list'")

  一般出現這個錯誤是sql語句有問題,比如里面少了空格。試了別人的博客里的方法都不靠譜,最后發現這是單引號引起的問題。語句里賦的值應該用函數repr處理一下供解釋器使用。

  1 sql = "update "+tablename+" set Address="+repr(info['ad'])+" where ID like "+repr(id[1])

  另外MySQL單獨使用單引號和雙引號沒有區別。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM