pymysql操作数据库

参考:https://www.cnblogs.com/xfxing/p/9322199.html

安装pymysql

pip install pymysql -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

db.py

# coding=utf-8

import pymysql
from apscheduler.schedulers.background import BackgroundScheduler


class CDb():
    def __init__(self):
        self.mHost = "localhost"
        self.mUser = "pch"
        self.mPwd = "pch2015"
        self.mDB = "fishdb"
        self.mTimer = BackgroundScheduler()
        self.mTableUserInfo = "user_info"
        self.mTableItemInfo = "item_info"

    def start(self):
        self.mConn = pymysql.connect(host=self.mHost,
                                     port=3306,
                                     user=self.mUser,
                                     passwd=self.mPwd,
                                     db=self.mDB)
        self.mCursor = self.mConn.cursor()

    def dropTables(self):
        self.mCursor.execute(
            "drop table if exists {};".format(self.mTableItemInfo))
        self.mCursor.execute(
            "drop table if exists {};".format(self.mTableUserInfo))

    def creatTableUserInfo(self):
        sql = '''create table if not exists {}(
        user_id int auto_increment comment '编号id',
        user_name varchar(40) default '空' comment '名字',
        age int default 10 comment '玩家年纪',
        money double default 2.1 comment '存款',
        avatar mediumblob not null,
        primary key (user_id)
        )engine=innodb  default charset=utf8mb4  collate=utf8mb4_unicode_ci  
        row_format=compact auto_increment=190 comment="玩家信息表";'''.format(
            self.mTableUserInfo)

        self.mCursor.execute(sql)
        # self.commit()
        print("createTableUserInfo: {}".format(self.mTableUserInfo))

    def createTableItemInfo(self):
        sql = '''create table if not exists {}(
        item_id  int auto_increment comment '道具编号',
        item_name varchar(40)  default '空' comment '道具名称',
        price     int default 0 comment  '价格',
        user_id  int default 0 comment '玩家编号id',
        primary key (item_id),
        constraint fk_user_id foreign key(user_id) references user_info(user_id)
        )engine=innodb  default charset=utf8mb4  collate=utf8mb4_unicode_ci  
        row_format=compact comment="玩家信息表";'''.format(self.mTableItemInfo)
        self.mCursor.execute(sql)
        print("createTableItemInfo: {}".format(self.mTableItemInfo))
        # self.commit()

    def insert(self, uid, age):
        sql = '''insert into {} (user_name,age,avatar) values ("ys{}",{},"");
        '''.format(self.mTableUserInfo, uid, age)
        self.mCursor.execute(sql)
        # print("insert: {},  {}, {},  {}".format(uid, age, result, sql))

    def insertMany(self):
        users = [("用户1", 8),
                 ("用户2", 83),
                 ("用户3", 32),
                 (83838, 9)]

        sql = '''insert into {} (user_name,age,avatar) values (%s,%s,"");'''.format(
            self.mTableUserInfo)

        self.mCursor.executemany(sql, users)

        items = [
            ("武器1", 192),
            ("武器2", 192),
            ("武器3", 193),
        ]

        sql = '''insert into {} (item_name,user_id) values (%s,%s);'''.format(
            (self.mTableItemInfo))
        self.mCursor.executemany(sql, items)

    def updateName(self):
        sql = '''update {} set user_name="update更改名字" where user_name="用户3";'''.format(
            self.mTableUserInfo)
        self.mCursor.execute(sql)

    def keepHeartBeat(self):  # NOTE: 每2小时向mysql数据库发一次'select 1',因为mysql超过8小时没操作,会断开
        self.mCursor.execute("select 1")
        allRecords = self.mCursor.fetchall()
        self.mConn.commit()
        print("keepHeartBeat:allRecords = {}".format(allRecords))

        one = self.mCursor.fetchone()
        print("one = {}".format(one))
        self.mConn.commit()

    def selectSome(self):
        sql = '''select * from {} where user_id >= 192 and user_id <198 order by user_id desc;'''.format(
            self.mTableUserInfo)
        self.mCursor.execute(sql)
        some = self.mCursor.fetchall()
        print("selectSome:some = {}".format(some))
        for i in range(0, len(some)):
            print("selectSome:[{}]={}".format(i, some[i]))

    def selectOne(self):
        sql = '''select user_name from {} where user_id=197;'''.format(
            self.mTableUserInfo)
        self.mCursor.execute(sql)
        # some = self.mCursor.fetchall()
        # print("selectOne:some {}".format(some))
        one = self.mCursor.fetchone()
        print("selectOne:one {}".format(one))

    def deleteOne(self):
        sql = '''delete from {} where user_id=195;'''.format(
            self.mTableUserInfo)
        self.mCursor.execute(sql)
        self.commit()

    def commit(self):
        self.mConn.commit()

    def close(self):
        self.mCursor.close()
        self.mConn.close()

test.db.py:

'''
Description: 
Author: pdh
Date: 2020-11-05 19:50:14
LastEditors: pdh
LastEditTime: 2020-11-08 20:19:46
FilePath: \pysql\test_db.py
'''

# coding=utf-8

import utils.db
import threading


class CWorker(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        db = utils.db.CDb()
        db.start()
        db.dropTables()
        db.creatTableUserInfo()
        db.createTableItemInfo()
        # db.commit()

        # 一次插入多条记录
        db.insertMany()
        db.commit()

        # 插入记录
        # for id in range(73, 88):
        #     db.insert(id, random.randint(8, 98))
        #     # time.sleep(1)
        # db.commit()

        # 获取多条记录
        # db.selectSome()

        # 获取一条记录的名字
        # db.selectOne()

        # 删除一条记录
        # db.deleteOne()

        # 心跳
        # db.keepHeartBeat()


if __name__ == "__main__":
    worker = CWorker()
    worker.start()

    while True:
        line = input("输入:")
        if line == 'q':
            break

    print("main:end")

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值