真机下载mariadb并初始化(设置个密码即可)
1.创建数据表
import pymysql
# 1.连接数据库
conn = pymysql.connect(host='localhost',
user='root',
password='123',
db='westos',
charset = 'utf8'
)
# 2.创建游标对象
cur = conn.cursor()
# 3.对数据库进行操作
# 1).#########创建数据表
try:
create_sqli = "create table hello (id varchar(5),name varchar(30));"
print(cur.execute(create_sqli))
except Exception as e:
print('创建数据表失败',e)
else:
print('创建数据表成功')
结果:
2.插入数据
2.1插入单条数据
import pymysql
# 1.连接数据库
conn = pymysql.connect(host='localhost',
user='root',
password='123',
db='westos',
charset = 'utf8',
# autocommit='True' #必须提交,用此命令或者下方的conn.commit()均可
)
# 2.创建游标对象
cur = conn.cursor()
# 3.对数据库进行操作
# 1).#########创建数据表
try:
insert = "insert into hello values(4,'grape');" #(3,'apple')是用autocommit()提交的数据
cur.execute(insert)
conn.commit()#提交插入的数据
except Exception as e:
print('创建数据表失败',e)
else:
print('创建数据表成功')
2.2插入多条数据
import pymysql
# 1.连接数据库
conn = pymysql.connect(host='localhost',
user='root',
password='123',
db='westos',
charset = 'utf8',
autocommit='True'
)
# 2.创建游标对象
cur = conn.cursor()
# 3.对数据库进行操作
# 1).#########创建数据表
try:
#第一种方式
# info1=[(i,i) for i in range(1,3)]
# insert_sqli="insert into hello values(%d,%s);"
# for item in info1:
# print('insert语句:',insert_sqli %(item))
# cur.execute(insert_sqli %(item))
#第二种方式
info2=[(i,i) for i in range(3,6)]
insert_sql="insert into hello values(%s,%s);"
cur.executemany(insert_sql,info2) #第二种方式插入列表时executemany
except Exception as e:
print('创建数据表失败',e)
else:
print('创建数据表成功')
3.数据表的查看
import pymysql
# 1.连接数据库
conn = pymysql.connect(host='localhost',
user='root',
password='123',
db='westos',
charset='utf8',
autocommit='True'
)
# 2.创建游标对象
cur = conn.cursor()
# 3.对数据库进行操作
# 1).#########查询数据库
sqli = 'select name from hello where id=4'
# 默认不返回查询结果集,返回数据记录数
a = cur.execute(sqli) #返回符合条件的记录数
print(a)
a = cur.fetchone() #返回结果
print(a)
查看指定位置内容:
import pymysql
# 1.连接数据库
conn = pymysql.connect(host='localhost',
user='root',
password='123',
db='westos',
charset='utf8',
autocommit='True'
)
# 2.创建游标对象
cur = conn.cursor()
# 3.对数据库进行操作
# 1).#########查询数据库
sqli = 'select * from hello'
print(cur.execute(sqli))#返回符合条件个数
print(cur.fetchone())# 获取下一个查询结果集
print(cur.fetchone())
print(cur.fetchmany(2))# 获取指定个数查询结果集,从当前指针开始
info = cur.fetchall()#获取所有结果,从当前指针开始到最后
print(info)
执行结果:
4.数据表的指针移动
可以通过cursor.scroll(position, mode=“relative | absolute”)
方法,来设置相对位置游标和绝对位置游标.
当mode=‘absolute’时,代表绝对移动,value就代表移动的绝对位置,value=0就代表移动到位置0处,就是结果集开头,value=3就是移动到位置3处,也就是第4条记录处.
mode缺省值为’relative’,代表相对移动,当mode='relative’时,value就是移动的长度,value>0向后移动(从位置0移动到位置2),value<0向前移动(比如从位置2移动到位置0).
import pymysql
# 1.连接数据库
conn = pymysql.connect(host='localhost',
user='root',
password='123',
db='westos',
charset='utf8',
autocommit='True'
)
# 2.创建游标对象
cur = conn.cursor()
# 3.对数据库进行操作
# 1).#########查询数据库
sqli = 'select * from hello'
cur.execute(sqli)
#移动游标指针
print(cur.fetchmany(3)) #此时指针位于3
print('正在移动指针到最开始的地方....')
cur.scroll(0,'absolute')#此时指针位于0
print(cur.fetchmany(2)) #位于2
cur.scroll(-2,mode='relative') #移到0
print(cur.fetchmany(2)) #位于2(打印2个数据,指针向后移动2)
cur.scroll(3,mode='relative') #以当前位置(2)为基准,向后移动3,此时位于5
print(cur.fetchmany(2)) #打印2个,也就是打印第6和第7个
conn.close() #关闭
5.数据库的应用
“”"
数据库应用
随机生成100个人名和对应的密码;
人名由三个汉字或者2个汉字组成,
姓 = [许, 张, 赵, 钱, 孙, 李, 朱, 杨]
名 = [彬, 群, 宁, 盼, 龙, 欢, 丹]
密码统一6位, 由字母和字符组成;
存储上述用户信息到数据库中, 保存在数据库users中的userinfo表中;
“”"
import random
import string
import pymysql
from random import choice as choice
def create_name():
first=['孙','杨','薛','梁','马','李','刘']
second=['丹','丽','国','强','斌','娟']
third=['丹','丽','国','强','斌','娟','']
name=choice(first)+choice(second)+choice(third)
return name
# print(create_name())
def create_passwd(count=6):
a=string.ascii_letters
b=string.digits
c=random.sample(a+b,count)
return ''.join(c)
# print(create_passwd())
def main():
conn=pymysql.connect(host='localhost',
user='root',
passwd='123',
db='westos',
charset='utf8',
autocommit='True'
)
#2创建游标对象
n = int(input('请输入你想插入几条数据:'))
cnn=conn.cursor()
for i in range(n):
create_sqli = "insert into hello values('%s','%s');" %(create_name(),create_passwd())#必须在%s两边加''
cnn.execute(create_sqli)
main()
此时运行程序会报点错。但是查看表已经添加上:
如何解决?
为什么会显示乱码,因为表的某些格式不是utf8
输入指令将此表格式转化为utf8:
alter table hello convert to character set utf8;
再次运行程序,就不报错了: