码迷,mamicode.com
首页 > 编程语言 > 详细

远程和Ubuntu服务器进行Socket通信,使用python和C#(准备篇)

时间:2018-10-09 23:10:47      阅读:333      评论:0      收藏:0      [点我收藏+]

标签:方法   名称   word   div   部分   mysqldb   upd   mysql的安装   name   

  服务器在阿里云上,和一般的本地配置方案不太一样,所以网上的博客里没有解决办法,本人在这里记录一下,方便大家交流。

  由于数据要保存到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单独使用单引号和双引号没有区别。

 

远程和Ubuntu服务器进行Socket通信,使用python和C#(准备篇)

标签:方法   名称   word   div   部分   mysqldb   upd   mysql的安装   name   

原文地址:https://www.cnblogs.com/baijing1/p/9763680.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!