我想把我的树莓派连接到一个在线数据库,并作出改变的记录,但我尝试了几个时间,它给我的错误,如“连接超时”,“拒绝访问根用户使用密码= yes”
import mysql.connector
mydb = mysql.connector.connect(
host="sql106.epizy.com",
user="epiz_24910878",
passwd="jianliang176",
database="epiz_24910878_mydb"
)
mycursor = mydb.cursor()
def insertStudentCheckin():
try:
sql = "INSERT INTO tblUser (uName,uPW) VALUES (%s,%s)"
val = (str(2),'absent')
#insert the check in with card id and today time and date
#first time is insert so no nid to check the card id value
mycursor.execute(sql, val)
mydb.commit()
print(mycursor.rowcount, "student today record inserted.")
except Exception as e:
print(e)
print("hello")
insertStudentCheckin()
print("world")
我想要的输出是可以将记录插入远程数据库。 问题来源StackOverflow 地址:/questions/59386448/is-there-method-to-connect-python-to-online-database
由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 pymysql 模块。
pymysql 模块可以通过 pip 安装。但如果你使用的是 pycharm IDE,则可以使用 project python 安装第三方模块。
[File] >> [settings] >> [Project: python] >> [Project Interpreter] >> [Install按钮]
由于Python统一了数据库连接的接口,所以 pymysql 和 MySQLdb 在使用方式上是类似的:
复制代码 #创建数据库连接 pymysql.Connect()参数说明 host(str): MySQL服务器地址 port(int): MySQL服务器端口号 user(str): 用户名 passwd(str): 密码 db(str): 数据库名称 charset(str): 连接编码,存在中文的时候,连接需要添加charset='utf8',否则中文显示乱码。
connection对象支持的方法 cursor() 使用该连接创建并返回游标 commit() 提交当前事务,不然无法保存新建或者修改的数据 rollback() 回滚当前事务 close() 关闭连接
cursor对象支持的方法 execute(op) 执行SQL,并返回受影响行数 fetchone() 取得结果集的下一行 fetchmany(size) 获取结果集的下几行 fetchall() 获取结果集中的所有行 rowcount() 返回数据条数或影响行数 close() 关闭游标对象 复制代码
==================MySQL===================
首先在连接数据库之前,先创建一个交易表,方便测试 pymysql 的功能:
复制代码 DROP TABLE IF EXISTS trade;
CREATE TABLE trade ( id int(4) unsigned NOT NULL AUTO_INCREMENT, name varchar(6) NOT NULL COMMENT '用户真实姓名', account varchar(15) NOT NULL COMMENT '银行储蓄账号', saving decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '账户储蓄金额', expend decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '账户支出总计', income decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '账户收入总计', PRIMARY KEY (id), UNIQUE KEY name_UNIQUE (name) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; INSERT INTO trade VALUES (1,'乔布斯','18012345678',0.00,0.00,0.00); 复制代码
==================Python===================
使用Python脚本实现增删改查和事务处理,源码如下:
复制代码 import pymysql.cursors
connect = pymysql.Connect( host='localhost', port=3310, user='woider', passwd='3243', db='python', charset='utf8' )
cursor = connect.cursor()
sql = "INSERT INTO trade (name, account, saving) VALUES ( '%s', '%s', %.2f )" data = ('雷军', '13512345678', 10000) cursor.execute(sql % data) connect.commit() print('成功插入', cursor.rowcount, '条数据')
sql = "UPDATE trade SET saving = %.2f WHERE account = '%s' " data = (8888, '13512345678') cursor.execute(sql % data) connect.commit() print('成功修改', cursor.rowcount, '条数据')
sql = "SELECT name,saving FROM trade WHERE account = '%s' " data = ('13512345678',) cursor.execute(sql % data) for row in cursor.fetchall(): print("Name:%s\tSaving:%.2f" % row) print('共查找出', cursor.rowcount, '条数据')
sql = "DELETE FROM trade WHERE account = '%s' LIMIT %d" data = ('13512345678', 1) cursor.execute(sql % data) connect.commit() print('成功删除', cursor.rowcount, '条数据')
sql_1 = "UPDATE trade SET saving = saving + 1000 WHERE account = '18012345678' " sql_2 = "UPDATE trade SET expend = expend + 1000 WHERE account = '18012345678' " sql_3 = "UPDATE trade SET income = income + 2000 WHERE account = '18012345678' "
try: cursor.execute(sql_1) # 储蓄增加1000 cursor.execute(sql_2) # 支出增加1000 cursor.execute(sql_3) # 收入增加2000 except Exception as e: connect.rollback() # 事务回滚 print('事务处理失败', e) else: connect.commit() # 事务提交 print('事务处理成功', cursor.rowcount)
cursor.close() connect.close() 复制代码
==================测试结果===================
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。