Python操作MySQL基础

pymysql

安装

conda install pymysql

pip install pymysql

代码

import pymysql
# 创建数据库连接
db = pymysql.connect(host='localhost', user='root', password='123456', charset='utf8')
# 创建游标对象
cursor = db.cursor()
# 使用游标对象的方法,操作mysql数据库
cursor.execute('show databases;')  # 执行SQL
# 获取执行结果:(('information_schema',), ('mysql',), ('performance_schema',), ('sys',))
print(cursor.fetchall())
# 提交到数据库执行(增删改需要提交,查询可以不用)
db.commit()
# 关闭游标对象
cursor.close()
# 关闭数据库的链接
db.close()

游标对象常用方法

方法功能
execute()执行MySQL基本命令
fetchone()取得结果集的第1行记录
fetchmany(size)取得结果集的size行记录
fetchall()取得结果集的所有行记录
close()关闭游标对象

pandas

import pymysql, pandas as pd
def read_db(query):
    pymysql.connect('localhost', 'root', '123456', base_name, charset='utf8')
    df = pd.read_sql(query, db)
    return df

sqlalchemy

# 创建连接引擎,这个engine是lazy模式,直到第一次被使用才真实创建
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/z')

# 设计 表的基类
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer
Base = declarative_base()
class Student(Base):
    __tablename__ = 'student'  # 表名
    sid = Column(String(20), primary_key=True)  # 表字段
    age = Column(Integer)  # 表字段
# 执行建表操作(继承Base的所有表)
Base.metadata.create_all(bind=engine)

# 创建ORM
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)  # 创建ORM基类
session = Session()  # 创建ORM对象
# 添加数据
tb_obj = Student(sid='a6', age=1)  # 创建表对象
session.add(tb_obj)  # 添加到ORM对象
session.commit()  # 提交
# 关闭ORM对象
session.close()

补充

en🔉cn
cursor光标;[计]游标,指针;
commitvt 犯罪;把…委托给;[计]提交
fetchvt. 取来
vi. 卖得
n. 诡计
alchemyˈælkəmin. 炼金术;魔力
declarativedɪˈklærətɪvadj. 公告的,宣言的;陈述的,叙述的
unsignedˌʌnˈsaɪndadj. 无符号的;未签名的

手写一个MySQL界面自用

import pymysql
def select():
    # connect
    db = pymysql.connect(host='localhost', user='root', password='123456', charset='utf8')
    cursor = db.cursor()
    cursor.execute('show databases;')
    print(cursor.fetchall())
    # select
    while True:
        sentence = ''
        while ';' not in sentence:
            clause = input('mysql> ').rstrip() + '\n'
            sentence += clause
        # 输入 ; 退出
        if sentence == ';\n':
            break
        try:
            cursor.execute(sentence)
            for i in cursor.fetchall():
                print(*i, sep=' | ')
            # db.commit()
        except Exception as error:
            print('\033[91m{}\033[0m'.format(error))
select()

建表SQL模板(复制用)

CREATE TABLE tb_name(
serial_number INT(9) PRIMARY KEY AUTO_INCREMENT COMMENT '编号',
url CHAR(255) UNIQUE NOT NULL COMMENT '统一资源定位符',
title VARCHAR(255) COMMENT '变长字符串',
detail TEXT COMMENT '细节',
price FLOAT(3,2) UNSIGNED DEFAULT 1.23 COMMENT '价格',
public_time DATETIME COMMENT '发布时间',
collect_date DATE COMMENT '采集日期'
) COMMENT '表注释';
-- 单行注释
INSERT tb_name (url,public_time)VALUES('定长字符串','2019-08-04');
/*
多行注释
*/
DROP TABLE tb_name;

阅读扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值