MySQL和Python交互

与Python交互

python3模块名:pymysql

conda install pymysql
conda install sqlalchemy

python2模块名:MySQLdb

import pymysql

# 1、创建与数据库连接对象
db = pymysql.connect(host='localhost', user='haoen110', password='123',
                     database='db4', charset='utf8')
# 2、利用db方法创建游标对象
cur = db.cursor()

# 3、利用游标对象execute()方法执行SQL命令
cur.execute("insert into sheng values            (16,300000,'台湾省');")

# 4、提交到数据库执行
db.commit()
print("OK!")

# 5、关闭游标对象
cur.close()

# 6、断开数据库连接
db.close()
+----+--------+-----------+
| id | s_id   | s_name    |
+----+--------+-----------+
|  1 | 130000 | 河北省    |
|  2 | 140000 | 陕西省    |
|  3 | 150000 | 四川省    |
|  4 | 160000 | 广东省    |
|  5 | 170000 | 山东省    |
|  6 | 180000 | 湖北省    |
|  7 | 190000 | 河南省    |
|  8 | 200000 | 海南省    |
|  9 | 200001 | 云南省    |
| 10 | 200002 | 山西省    |
| 16 | 300000 | 台湾省    |
+----+--------+-----------+

pymysql 使用流程

1、建立数据库连接db = pymysql.connect(...)
2、创建游标对象cur = db.cursor()
3、游标方法cur.execute("insert ...")
4、提交到数据库db.commit()
5、关闭游标对象cur.close()
6、断开数据库连接db.close()

connect对象

  • 建立数据库连接db = pymysql.connect(...)

    • host:主机地址,本地 localhost
    • port:端口号,默认3306
    • user:用户名
    • password:密码
    • database:库
    • charset:编码方式,推荐使用utf8

数据库连接对象(db)的方法

  • db.close() 关闭连接
  • db.commit() 提交到数据库执行
  • db.rollback() 回滚
  • cur = db.cursor() 返回游标对象,用于执行SQL具体SQL命令

游标对象(cur)的方法

  • 创建游标对象cur = db.cursor()

    • cur.execute(SQL命令,[列表]) 执行SQL命令
    • cur.close() 关闭游标对象
    • cur.fetchone() 获取第一条数据
      • 是一个元组(1,100001,"河北省")
    • cur.fetchone() 获取第一条数据
    • cur.fetchmany(n) 获取n条数据
    • cur.fetchall() 获取所有记录
import pymysql

# 1、创建与数据库连接对象
db = pymysql.connect(host='localhost', user='haoen110', password='123',
                     database='db4', charset='utf8')
# 2、利用db方法创建游标对象
cur = db.cursor()

# 3、利用游标对象execute()方法执行SQL命令
try:
    sql_select = "select * from sheng"
    cur.execute(sql_select)

    data1 = cur.fetchone()
    print(data1)
    print("*"*10)

    data2 = cur.fetchmany(3)
    for m in data2:
        print(m)
    print("*"*10)

    data3 = cur.fetchall()
    for m in data3:
        print(m)
    print("*"*10)

except Exception as e:
    db.rollback()
    print("出现错误,已回滚", e)

# 4、提交到数据库执行
db.commit()
print("OK!")

# 5、关闭游标对象
cur.close()

# 6、断开数据库连接
db.close()
(1, 130000, '河北省')
**********
(2, 140000, '陕西省')
(3, 150000, '四川省')
(4, 160000, '广东省')
**********
(5, 170000, '山东省')
(6, 180000, '湖北省')
(7, 190000, '河南省')
(8, 200000, '海南省')
(9, 200001, '云南省')
(10, 200002, '山西省')
(16, 300000, '台湾省')
**********
OK!

参数化

# 插入数据
import pymysql

# 1、创建与数据库连接对象
db = pymysql.connect(host='localhost', user='haoen110', password='123',
                     database='db4', charset='utf8')
# 2、利用db方法创建游标对象
cur = db.cursor()

# 3、利用游标对象execute()方法执行SQL命令

s_id = input("请输入省的编号:")
name = input("请输入省的名字:")

try:
    sql_insert = "insert into sheng(s_id,s_name) values(%s,%s);"
    cur.execute(sql_insert, [s_id, name])
    print("插入成功!")

except Exception as e:
    db.rollback()
    print("出现错误,已回滚", e)

# 4、提交到数据库执行
db.commit()
print("OK!")

# 5、关闭游标对象
cur.close()

# 6、断开数据库连接
db.close()
请输入省的编号:999
请输入省的名字:haha
插入成功!
OK!

+----+--------+-----------+
| id | s_id   | s_name    |
+----+--------+-----------+
|  1 | 130000 | 河北省    |
|  2 | 140000 | 陕西省    |
|  3 | 150000 | 四川省    |
|  4 | 160000 | 广东省    |
|  5 | 170000 | 山东省    |
|  6 | 180000 | 湖北省    |
|  7 | 190000 | 河南省    |
|  8 | 200000 | 海南省    |
|  9 | 200001 | 云南省    |
| 10 | 200002 | 山西省    |
| 16 | 300000 | 台湾省    |
| 17 |    999 | haha      |
+----+--------+-----------+

自己写封装

from pymysql import *

class Mysqlpython:
    def __init__(self, database, host='localhost',
                 user='haoen110', password='123',
                 port=3306, charset='utf8'):
        self.host = host
        self.user = user
        self.password = password
        self.port = port
        self.charset = charset
        self.database = database

    def open(self):
        self.db = connect(host=self.host,
                          user=self.user,
                          port=self.port,
                          database=self.database,
                          password=self.password,
                          charset=self.charset)
        self.cur = self.db.cursor()

    def close(self):
        self.cur.close()
        self.db.close()

    def zhixing(self,sql,L=[]):    # pymysql.execute(sql)
        try:
            self.open()
            self.cur.execute(sql,L)
            self.db.commit()
            print("ok")
        except Exception as e:
            self.db.rollback()
            print("Failed",e)
        self.close()

    def all(self,sql,L=[]):
        try:
            self.open()
            self.cur.execute(sql,L)
            result = self.cur.fetchall()
            return result
        except Exception as e:
            print("Failed",e)
        self.close()

# 创建数据库连接对象
# sqlh = Mysqlpython("db4")
# sql_insert = "insert into sheng(s_id,s_name) values(666,'jjj');"
# sqlh.zhixing(sql_insert)

sql_select = "select * from sheng;"
data = sqlh.all(sql_select)
print(data)
ok
((1, 130000, '河北省'), (2, 140000, '陕西省'), (3, 150000, '四川省'), (4, 160000, '广东省'), (5, 170000, '山东省'), (6, 180000, '湖北省'), (7, 190000, '河南省'), (8, 200000, '海南省'), (9, 200001, '云南省'), (10, 200002, '山西省'), (16, 300000, '台湾省'), (17, 999, 'haha'), (18, 666, 'jjj'))

自制登录系统

create table user(
username varchar(20),
password char(40)
);

insert into user values("SHE","7c4a8d09ca3762af61e59520943dc26494f8941b"); # sha1加密的123456
from hashlib import sha1

uname = input("请输入用户名:")
pwd = input("请输入密码:")

# 用sha1给pwd加密
s1 = sha1() # 创建sha1加密对象
s1.update(pwd.encode("utf8"))  # 指定编码
pwd2 = s1.hexdigest() # 返回16进制加密的结果

sqlh = Mysqlpython("db4")
select = "select password from user where username=%s;"
result = sqlh.all(select,[uname])

print(result) # 打印出来看看

if len(result) == 0:
    print("用户名不存在")
elif result[0][0] == pwd2:
    print("登录成功")
else:
    print("密码错误")
请输入用户名:SHE
请输入密码:123456
(('7c4a8d09ca3762af61e59520943dc26494f8941b',),)
登录成功

ORM (Object Relation Mapping 对象关系映射)

  • 定义:

    • 把对象模型映射到MySQL数据库中
  • sqlalchemy模块安装
    • 示例:

        class User(Base):
            __tablename__="t1" # 声明要创建的表名
            id = Column(Integer, primary+key=True)
            name = Column(String(20))
        # 解释:User 一张表,id name
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String

engine = create_engine("mysql+pymysql://haoen110:123@localhost/db4",encoding="utf8")
Base = declarative_base() # orm基类

class User(Base): # 继承Base基类
    __tablename__ = "t123"
    id = Column(Integer,primary_key=True)
    name = Column(String(20))
    address = Column(String(40))

Base.metadata.create_all(engine)
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(20) | YES  |     | NULL    |                |
| address | varchar(40) | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+

原文地址:https://www.cnblogs.com/haoenwei/p/10620542.html

时间: 2024-11-11 11:53:34

MySQL和Python交互的相关文章

pymysql实现MySQL与Python交互

常见MySQL操作 所需模块: 1 pip3 install pymysql 查询(fetchone,fetchmany,fetchall): import pymysql #连接 con = pymysql.connect(host='localhost',user='root',passwd='admin',db='db1',charset='utf8') # 游标 cur = con.cursor() sql = 'select * from USER ' cur.execute(sql)

Python 交互模式中 Delete/Backspace 键乱码问题

进入 Python 交互模式,按下 Delete/Backspace 键,会出现 ^H 字符 解决方式: 1. 进到 Python 的Modules目录 [[email protected] Python-2.7.12]# pwd/root/Python-2.7.12[[email protected] Python-2.7.12]# cd Modules/ 2. 取消文件中 readline 部分对应的注释 vim Setup readline readline.c -lreadline -l

在Ubuntu上安装Mysql For Python

安装: 首先安装pip,并且把pip更新到最小版本 apt-get install python-pip pip install -U pip 安装mysql开发包 apt-get install python-dev libmysqlclient-dev 通过pip安装Mysql For Python pip install MySQL-python 测试,在Python命令行里输入import MySQLdb,看报不报错 [email protected]:~$ python Python

Installing MySQL Connector/Python using pip v1.5

The latest pip versions will fail on you when the packages it needs to install are not hosted on PyPI . When you try to install MySQL Connector/Python the usually way, you get following message is: shell> pip install mysql-connector-python Could not

MySQL Connector/Python 开发者指南

本文翻译自:https://dev.mysql.com/doc/connector-python/en/ 摘要 这篇手册描述了怎么来安装和配置 MySQL Connector/Python,MySQL Connector/Python 是 Python 和 MySQL 服务进行通信的一个独立驱动程序,本篇手册还将阐述如何利用它来开发数据库应用程序. 获取 Connector/Python 的每一次发布版本的改动细节,请参阅 MySQL Connector/Python Release Notes

python交互模式设置及VIM的tab补齐

本文出自http://wushank.blog.51cto.com/3489095/1612042 一.python交互模式设置 Python 解释器具有简单的行编辑功能. 在 Unix 系统上,任何 Python 解释器都可能已经添加了 GNU readline 库支持,这样就具备了精巧的交互编辑和历史记录等功能. 在 Python 主窗口中输入 Control-P 可能是检查是否支持命令行编辑的最简单的方法. 如果发出嘟嘟声(计算机扬声器),则说明你可以使用命令行编辑功能: 如果没有任何声音

Snippet: Fetching results after calling stored procedures using MySQL Connector/Python

https://geert.vanderkelen.org/2014/results-after-procedure-call/ Problem Using MySQL Connector/Python, you are calling a stored procedure which is also selecting data and you would like to fetch the rows of the result. Solution For this example we cr

MySQL 以及 Python 实现排名窗口函数

大部分数据库都提供了窗口函数,比如RANK,ROW_NUMBER等等. MySQL 这方面没有直接提供,但是可以变相的实现,我以前写了row_number 的实现,今天有时间把 rank 的实现贴出来. 这里,我用MySQL 以及Python 分别实现了rank 窗口函数.原始表信息: t_girl=# \d group_concat; Table "ytt.group_concat" Column | Type | Modifiers ----------+-------------

_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':问题的解决 mysql安装python

在win7下安装了Python后,想安装python-MySQL,使用pip安装出现如下问题: >pip install MySQL-python _mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory error: command '"C:\Users\fnngj\AppData\Local\Programs\Common\Microsoft