Python 操作 mysql,安装,设置及连接

MySQL数据库的安装

  1. 注意事项:
  • 注意操作系统平台(32位,64位)
  • 注意安装M有SQL的版本(企业版,社区版,MariaDB(centos默认可能安装这个版本))
  • 注意安装后避免yum自动更新(如果是网络安装,系统安装包会和yum建立一个关联关系,会自动跟随yum更新,安装完成后,需要删除)
  • 注意数据库的安全性(合理的访问权限,密码复杂度)
  1. 安装:
  • 查看系统结构:
    arch --> x86_64
  • 查看系统版本:
    cat /etc/redhat-release --> CentOS Linux release 8.3.2011
  • 下载安装包:
    dev.mysql.com 可以下载安装包
    或者通过网络安装,先下载 网络安装工具:
    wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
    安装mysql源:
    yum localinstall mysql57-community-release-el7-8.noarch.rpm
  • 安装:
    yum install mysql-community-server
    如果报错: 报错 Error: Unable to find a match: mysql-community-server


    image.png

    解决办法:

  • 禁用本地的Mysql模块:
    yum module disable mysql
  • 再次安装:
    yum install mysql-community-server
  1. 安装完成后设置:
  • 取消自动更新:
    yum remove mysql57-community-release.noarch
  • 启动mysql:
    systemctl start mysqld
  • 设置随开机自动启动:
    systemctl enable mysqld
    systemctl daemon-reload
  • 查看mysql服务状态:
    systemctl status mysqld
  • 检查mysql是否为MariaDB
    rpm -qa | grep -i 'mysql'
  • 可选设置: 端口开放:
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --reload
  1. 登录mysql:
  • 查看mysql初始密码:
    grep 'password' /var/log/mysqld.log | head -1
    或者:
    grep 'temporary password' /var/log/mysqld.log
    默认密码复杂度要求:


    image.png
  • 修改密码:
    alter user 'root'@'localhost' identified by 'New_password12!';
  • 查看密码复杂度:
    show variables like '%password%';
  • 修改密码复杂度:
    set global validate_password_police=0;
  1. MySQL 字符集 charset
  • utf8 (3位字节) 不等于 utf-8 (4字节)
  • utf8mb4 相当于 utf-8
  • 查看字符集:
    show variables like '%character%';


    image.png
  • 查看校对规则:
    show variables like '%collation_%';


    image.png
  1. 修改字符集
  • vim /etc/my.cnf

[client]
default_character_set = utf8mb4
[mysql]
default_character_set = utf8mb4
[mysqld]
interactive_timeout = 28800 # 针对交互式连接 超时时间
wait_timeout=28800 # 针对非交互式连接超时时间
max_connections=1000 # MySQL的最大连接数
character_set_server = utf8mb4 # MySQL字符集设置
init_connect = 'SET NAMES utf8mb4' # 服务器针对每个连接的客户端执行的字符串
character_set_client_handshake = FALSE
collation_server = utf8mb4_unicode_ci # 校对规则 _ci 大小写不敏感

  1. 连接MySQL
  • MySQLdb 适用于 python2, MYSQL 不高于5.5, python不高于2.7
    在Python3中 MySQLdb包叫做 mysqlclient,加载的依然是MySQLdb,如下:
    pip install mysqlclient
    import MySQLdb
  • 其他DB-API:
    pip install pymysql # 流行度最高
    pip install mysql-connector-python # MySQL官方
  • 使用ORM: 对象映射关系,对DB-API的一种扩展,不可以单独使用,需要与DB-API结合。 对DB-API的一种抽象,可以应用于多种语言,多种数据库。
    pip install sqlalchemy
  • 代码示例:
  • pymsql:
#!/usr/bin/python3
# PyMYSQL 连接 MySQL 数据库
# pip3 install PyMySQL
import pymysql
# 打开数据库连接
# mysql > create database testdb;
# mysql > use testdb;
# mysql > GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'%' IDENTIFIED BY 'testpass';

db = pymysql.connect('192.168.246.129', 'testuser', 'testpass', 'testdb')

try:
    with db.cursor() as cursor:
        sql = 'SELECT VERSION()'
        cursor.execute(sql)
        result = cursor.fetchone()
    db.commit()
except Exception as e:
    print(f'fetch error {e}')
finally:
    db.close()
print(f'Database version: {result} ')
  • sqlalchemy, 使用元数据
#!/usr/bin/python3
# sqlalchemy 连接数据库
# pip install sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey
engine = create_engine('mysql+pymysql://testuser:testpass@192.168.246.129:3306/testdb', echo=True)

meta = MetaData(engine)

book = Table('book', meta,
             Column('id', Integer, primary_key=True),
             Column('name', String(20)))
author = Table('author', meta,
               Column('id', Integer, primary_key=True),
               Column('book_id', None, ForeignKey('book.id')),
               Column('author_name', String(200), nullable=False))
try:
    meta.create_all()
except Exception as e:
    print(f'create error {e}')
  • sqlalchemy, 使用ORM
#!/usr/bin/python3
# sqlalchemy 连接数据库
# pip install sqlalchemy
from sqlalchemy import Integer, Column, String, ForeignKey, DateTime, create_engine
from sqlalchemy.ext.declarative import declarative_base
from datetime import datetime

Base = declarative_base()

class Book_Table(Base):
    __tablename__ = 'bookorm'
    book_id = Column(Integer(), primary_key=True)
    book_name = Column(String(50), index=True)

class Author_table(Base):
    __tablename__ = 'authororm'
    user_id = Column(Integer(), primary_key=True)
    username = Column(String(15), nullable=False, unique=True)
    created_on = Column(DateTime(), default=datetime.now)
    updated_on = Column(DateTime(), default=datetime.now, onupdate=datetime.now)

dburl = 'mysql+pymysql://testuser:testpass@192.168.246.129:3306/testdb?charset=utf8mb4'

engine = create_engine(dburl, echo=True, encoding='utf-8')
Base.metadata.create_all(engine)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269