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

  由于数据要保存到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是想创建的数据库名称
   use basebname; # 进入这个新建的数据库
   create table tablename(ID varchar(30) not null, Address varchar(70), primary key(ID)); #在里面新建一个表含两列,ID和Adress,ID不能为空,主键设置为ID
   grant all privileges on basename.tablename to user01@"%" identfied by "password";
   flush privileges; # 更新权限使得其生效

  上面第四句是新建一个名为user01的用户,在basename里的tablename表里有所有的权限,@"%"表示可以在任何地方访问以密码password访问,换成@"localhost"表示只能在本地访问。而查看哪些用户具有哪些权限的语句是:

  1 select user, host from mysql.user;    # 查看所有用户名和他们的访问位置
   show grants for user01@"%"; # 查看user01用户的所有权限

  我们知道权限控制是很重要的,如果给错权限可以撤销:

  1 revoke create,drop on basename.tablename to user01@"%";    # 撤销用户创建和删除的权限
   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)
  
   try:
   with connection.cursor() as cursor:
   # 写一个插入语句,向user这个表插入一条记录
   sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"  #
   cursor.execute(sql)
  
   # 最后提交一下变更
   connection.commit()
  
   with connection.cursor() as cursor:
   # 查询一条记录,也可以用fetchall查询所有满足条件的记录
   sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
   cursor.execute(sql)
   result = cursor.fetchone()
   print(result)
   finally:
   connection.close()

  看似一切正常,work well,但是在运行自己构造sql语句的时候始终报错:

  1 sql = "update "+tablename+" set Address="+info['ad']+" where ID like "+id[1]
   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#(准备篇)的更多相关文章

  1. Socket通信的Python实现

    Python中实现socket通信,socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以使用.下面就说一下服务端可使用的模块. 模 ...

  2. navicat for mysql远程连接ubuntu服务器的mysql数据库

    经常玩服务器上的mysql数据库,但是基于linux操作Mysql多有不便,于是就想着使用GUI工具来远程操作mysql数据库.已经不是三次使用navicat-for-mysql了,但是每次连接远程服 ...

  3. ZH奶酪:Ubuntu客户端通过SSH方式远程登录Ubuntu服务器

    1.概述 传统的远程登录(telnet,rlogin)时不安全的,他们在网络上用明文传输口令和数据,SSH则是安全的,openssh提供两种级别的验证方式. (1)基于口令的安全验证:知道服务器的帐号 ...

  4. [转]Flash Socket通信的安全策略

    昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了.查了一些资料之后找到了解决办法.这里感谢 剑心 提供帮助,以及同事若水三千提供Jav ...

  5. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  6. Flash Socket通信的安全策略问题 843端口

    1.问题描述       将flash发布为html格式后,加载页面后,swf无法与服务器进行socket通信.Flash端显示的错误为:securityErrorHandler信息: [Securi ...

  7. Socket通信原理简介

    Socket通信原理简介 字数1011 阅读1766 评论2 喜欢11 何谓socket 计算机,顾名思义即是用来做计算.因而也需要输入和输出,输入需要计算的条件,输出计算结果.这些输入输出可以抽象为 ...

  8. 将Windows项目发布到Ubuntu服务器详细教程(Windows编程,Ubuntu服务器做解释器)

    前期准备 (1)专业版Pycharm(社区版没有deployment功能),学生,教师可申请免费专业版,详情可看我的博客. (2)可通过SSH连接Ubuntu服务器,并且服务器安装了Python解释器 ...

  9. C++服务器与java进行socket通信案例

    分类: [java]2012-10-08 12:03 14539人阅读 评论(46) 收藏 举报 注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyz ...

随机推荐

  1. 《图解HTTP》读书笔记(七:通信数据转发程序-代理/网关/隧道)

    HTTP通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理.网关和隧道,它们可以配合服务器工作.这些服务器和应用程序可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服 ...

  2. 001-zookeeper 简介-paxos算法,zk简介,特点

    一.概述 大数据体系概述 1.1.什么是zookeeper 是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于他实现同步服务,配 ...

  3. ThinkPHP安全规范指引

    流年 发布于 ThinkPHP官方博客: https://blog.thinkphp.cn/789333 本文主要和大家探讨一下ThinkPHP的安全注意事项,可以作为ThinkPHP建议的安全规范实 ...

  4. encodeURIComponent 和 decodeURIComponent 对字符串url编码 用于url拼字符传值

  5. unity开发多语言版本

    1.文字部分 ①.文字提取参考 http://www.xuanyusong.com/archives/2987: ②.把提取出来的文字放到excel总转换成繁体等版本: ③.把excel转换成txt文 ...

  6. Python_lambda

    最近学习到python的lambda表达式也是匿名函数, lambda不需要使用def 语句这样标准的形式定义一个函数,并不需要花很多时间去额外定义一个不常用的函数.lambda的本省就是一个长度为一 ...

  7. js大图轮播和倒计时

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. AIM Tech Round 5 (rated, Div. 1 + Div. 2) (A, B, E)

    B.Unnatural Conditions 题目链接 : http://codeforces.com/contest/1028/problem/B #include<iostream> ...

  9. Aes CBC加密

    <?php namespace app\components; use yii; class Aes { /** * This was AES-128 / CBC / PKCS5Padding ...

  10. Machine Learning 第三周

    ML week3 逻辑回归 Logistic Function h_\theta(x)=g(\theta^Tx) g(t)=\frac{1}{1+e^{-z}} 当t大于0, 即下面公式成立时,y=1 ...