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

  由于数据要保存到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. 【托业】【全真题库】TEST3-语法题

    101. sales representative 销售代表 keep one's promise with 遵守对……的诺言,信守对……的承诺 107. express interest in 表现 ...

  2. MySQL 8.0 InnoDB新特性

    MySQL 8.0 InnoDB新特性 1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3. ...

  3. 关于Android中使用BottomNavigationView切换横屏导致返回主页的问题

    问题: 如图,"发现"页即为主页,然后我们切换到"我"页,一切正常. 那么问题来了,如果切换到"我"页后把手机横屏,则会出现下面的情况. 嗯 ...

  4. Netflix是怎样运行的(极度简化版)— 每次点击播放按钮背后的复杂东西

    Netflix是怎样运行的(极度简化版)- 每次点击播放按钮背后的复杂东西 本文摘译自 How Netflix works: the (hugely simplified) complex stuff ...

  5. dom渲染方面的优化浅谈

    今天分享一个面试经验,上周面试中一位印象很深的面试官(主要长得很帅),问我了一个我至今印象很深刻的问题,当然不是什么你之后的职业规划啊,你工作中遇到过哪些问题啊之类的.原起于一道面试题,小伙伴们可以想 ...

  6. 1、写在开头的话——Tinking in Java 绪论之我见

    新兵道歉!版式不懂,技术若有错误,请指正,或发我邮箱1300431700@qq.com 不胜感激! 本文力图通过文章总结的形式,阐述自己的观点,迫使自己思考书中精髓,即使跟技术无关! 正文开始! “上 ...

  7. MariaDB与MySQL

    一.MariaDB安装部署 tar zxvf mariadb-5.5.31-linux-x86_64.tar.gz mv mariadb-5.5.31-linux-x86_64 /usr/local/ ...

  8. centos7多网卡配置bond0 (mode6无需交换机做配置)

    1.执行setup命令-->网络配置-->本例中四块网卡. 2.ifconfig列出四块网卡. 3.我们的目标,绑定eth0和eth1两块网卡作为公网网卡,ip设置为192.168.0.5 ...

  9. Java8-对map过滤

    1.对map按值过滤返回值 public class TestMapFilter { public static void main(String[] args) { Map<Integer, ...

  10. nodejs基础快速上手

    node 快速了解 hello node.js console.log("hello Node.js"); let http = require("http") ...