python数据库编程入门:python3.5连接mysql


概要:(1)通过针对python的db-api连接mysql数据库

            (2)通过对象-关系管理器(ORM)管理mysql

说明:(1)环境为python3.5.32

             (2)由于官方的MYSQLdb驱动只支持python 2,所以通过pymsql模块来连接mysql数据库

             (3)测试库为:test_python.test_sex : 有列name,sex,age

 一、pymsql连接mysql数据库

1. 安装和引入模块

easy_install pymysql3

import pymysql

2. 创建会话,进行创建和删除数据库实验

conn=pymysql.connect(host='localhost',user='root')

#conn.query('create database test')

conn.query('drop database test')

conn.commit()

conn.close()

3. 查询数据

conn = pymysql.connect(user='root', 

                 host='localhost', db='test_python')

cur = conn.cursor()

cur.execute("SELECT * FROM test_sex")

for r in cur:      

      print("row_number:" , (cur.rownumber) )        

      print("name:"+str(r[0])+"  sex:"+str(r[1])+" age:"+str(r[2])) 

cur.close()    

conn.close()

二、对象关系管理器(ORM)

(一)设计理念

1.多种python接口,需要熟悉多种数据库的sql

2.数据库表被转换为python对象,有列属性和方法

3.两种最出名的:SQLAlchemy,SQLObject

(二)安装

pip3 install SQLAlchemy

Installing collected packages: SQLAlchemy

  Running setup.py install for SQLAlchemy

Successfully installed SQLAlchemy-1.0.12

pip3 install SQLObject

Installing collected packages: FormEncode, SQLObject

  Running setup.py install for FormEncode

  Running setup.py install for SQLObject

Successfully installed FormEncode-1.3.0 SQLObject-2.1.2

(三)使用

1.创建连接串,数据库引擎, sessionmaker,进行查询

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

 

# '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'

DB_CONNECT_STRING = 'mysql+pymysql://root@localhost:3306/test_python?charset=utf8'

#engine = create_engine(DB_CONNECT_STRING, echo=True)

engine = create_engine(DB_CONNECT_STRING)

DB_Session = sessionmaker(bind=engine)

session = DB_Session()

print(session.execute('show databases').fetchall())

session.execute('use test_python')

print(session.execute('select * from test_sex where name = :name', {'name': 'clark01'}).first())

2.将表名转换为类

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

from sqlalchemy import Column

from sqlalchemy.types import CHAR, Integer, String

from sqlalchemy.ext.declarative import declarative_base

 

# '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'

DB_CONNECT_STRING = 'mysql+pymysql://root@localhost:3306/test_python?charset=utf8'

#engine = create_engine(DB_CONNECT_STRING, echo=True)

engine = create_engine(DB_CONNECT_STRING)

DB_Session = sessionmaker(bind=engine)

session = DB_Session()

print(session.execute('show databases').fetchall())

session.execute('use test_python')

print(session.execute('select * from test_sex where name = :name', {'name': 'clark01'}).first())

 

 

Base=declarative_base()

 

def init_db():

    Base.metadata.create_all(engine)

 

def drop_db():

    Base.metadata.drop_all(engine)

 

class test_sex(Base):

    __tablename__='test_sex'

    #sqlalchemy.exc.ArgumentError: Mapper Mapper|test_sex|test_sex

    #could not assemble any primary key columns for mapped table 'test_sex'

    name=Column(String(20),primary_key=True)

    sex=Column(String(20))

    age=Column(String(20))

 

name=test_sex(name='clark01')

print(name)

query=session.query(test_sex)

print(query)

print(query.statement)

for record in query:

    print(record.name)

 

print(query.all())

print(query.first())

print(query.filter(test_sex.name=='clark01').first())

********************************************************************
** 欢迎转发,注明原文:blog.csdn.net/clark_xu   徐长亮的专栏
** 谢谢您的支持,欢迎关注微信公众号:clark_blog 
********************************************************************

你可能感兴趣的:([2016年以后],python)