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 | 光标;[计]游标,指针; | |
commit | vt 犯罪;把…委托给;[计]提交 | |
fetch | vt. 取来 vi. 卖得 n. 诡计 | |
alchemy | ˈælkəmi | n. 炼金术;魔力 |
declarative | dɪˈklærətɪv | adj. 公告的,宣言的;陈述的,叙述的 |
unsigned | ˌʌnˈsaɪnd | adj. 无符号的;未签名的 |
手写一个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;