sqlalchemy 链接数据库,指定编码,解决密码含有特殊字符

# coding=utf-8
from urllib import quote_plus as urlquote
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
import MySQLdb

创建数据库连接

用此方法链接可以指定UTF8编码,同时解决密码中含有特定字符,比如含有@,则把密码部分进行URL编码
echo=True 会显示每条执行的 SQL 语句
max_overflow 最大链接数

connstr = "mysql+mysqldb://root:%s@127.0.0.1:3306/dbname?charset=utf8" % urlquote('password')
engine = create_engine(connstr,echo=True,max_overflow=5)

获取元数据

metadata = MetaData()

定义表

user = Table('user', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(20)),
    )

color = Table('color', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(20)),
    )

创建数据表,如果数据表存在,则忽视

metadata.create_all(engine)

创建链接

conn = engine.connect()

增删改查

#插入数据
engine.execute(
    "INSERT INTO color( name) VALUES ('test');"
)
result = engine.execute('select * from color')


print(result.fetchall())

conn.execute(user.insert(),{'name':'test'})

sql = user.insert().values(name='test2')
conn.execute(sql)

#删除一条user表里的 条件是id大于1的
#sql = user.delete().where(user.c.id > 1)
#执行
#conn.execute(sql)

#更新
#把名字为test的修改为aaa
#sql = user.update().where(user.c.name == 'test').values(name='aaa')
#conn.execute(sql)

print "查询user表里的内容"
sql = select([user, ])
res =conn.execute(sql)
print res.fetchall()

print '查询user表下的id'
sql = select([user.c.id, ])
res =conn.execute(sql)
print res.fetchall()

print '查询user表和color表的name,条件是user表的id1=color的id1'
sql = select([user.c.name, color.c.name]).where(user.c.id==color.c.id)
res =conn.execute(sql)
print res.fetchall()

print '查询user表的name,并按照条件排序'
#按照名字排序
sql = select([user.c.name]).order_by(user.c.name)
res =conn.execute(sql)
print res.fetchall()

print '按照id排序'
sql = select([user.c.name]).order_by(user.c.id)
res =conn.execute(sql)
print res.fetchall()

print '查询user表的name,并按照条件分组'
sql = select([user]).group_by(user.c.name)
res =conn.execute(sql)
print res.fetchall()

关闭链接

#关闭链接
conn.close()
标签:SQLAlchemy 发布于:2019-10-21 21:08:16