MariaDB无法插入数据
MariaDB can't insert data
数据库用户可以从其他地方连接到服务器。他们有访问权限。服务器防火墙被禁用。
import pymysql
def ConnectToDatabase():
return pymysql.connect(host = "hostName", user = "databaseUserId", password = "databaseUserPw", db = "databaseName", charset = "utf8")
def DisconnectDatabase(databaseConnection) :
databaseConnection.close()
def ExecuteQueryToDatabase(executeAbleQuery) :
databaseConnection = ConnectToDatabase()
databaseResultDataCursor = databaseConnection.cursor()
databaseResultDataCursor.execute(executeAbleQuery)
databaseResultDataRows = databaseResultDataCursor.fetchall()
DisconnectDatabase(databaseConnection)
return databaseResultDataRows
def ClientRequestQuery(request) :
dbQuery = request.GET.get('query',';')
print dbQuery
return HttpResponse(ExecuteQueryToDatabase(dbQuery))
def TestQuery(request):
ExecuteQueryToDatabase('insert into User2 (`a`, `b`, `c`, `d`) values(1, 2, 3, 4);');
return HttpResponse("test")
代码只是连接到 MariaDB 并插入一些数据,
但是当我尝试这段代码时,数据没有错误地消失了并且 "test" 成功返回
table结构是
MariaDB [ServiceDatabase]> desc User2;
│+-------+---------+------+-----+---------+-------+
│| Field | Type | Null | Key | Default | Extra |
│+-------+---------+------+-----+---------+-------+
│| a | int(11) | NO | | NULL | |
│| b | int(11) | NO | | NULL | |
│| c | int(11) | NO | | NULL | |
│| d | int(11) | NO | | NULL | |
│+-------+---------+------+-----+---------+-------+
│4 rows in set (0.00 sec)
Django版本为10.0.2
Python 版本为 2.7.12
谁能帮帮我?
您在代码中的任何时候都没有执行 commit
。使用 python 在数据库上执行插入的一般方法是
1) 创建连接和游标
conn = MySQLdb.connect(host= "hostname",
user="root",
passwd="password",
db="dbname")
x = conn.cursor()
2) 执行插入,如果事务失败则提交或回滚
try:
x.execute("INSERT INTO User2 (a, b, c, d) VALUES (%s, %s, %s, %s)", (1,2,3,4))
conn.commit()
except:
conn.rollback()
conn.close()
据我所知,您从未执行过 commit()
,因此交易实际上从未完成。
使用 mariadb
连接器并像
一样设置 autocommit=True
# Module Import
import mariadb
# Instantiate Connection
try:
conn = mariadb.connect(
user="john",
password="secret",
host="localhost",
port=3306,
autocommit=True)
except mariadb.Error as e:
print(f"Error connecting to MariaDB Platform: {e}")
sys.exit(1)
数据库用户可以从其他地方连接到服务器。他们有访问权限。服务器防火墙被禁用。
import pymysql
def ConnectToDatabase():
return pymysql.connect(host = "hostName", user = "databaseUserId", password = "databaseUserPw", db = "databaseName", charset = "utf8")
def DisconnectDatabase(databaseConnection) :
databaseConnection.close()
def ExecuteQueryToDatabase(executeAbleQuery) :
databaseConnection = ConnectToDatabase()
databaseResultDataCursor = databaseConnection.cursor()
databaseResultDataCursor.execute(executeAbleQuery)
databaseResultDataRows = databaseResultDataCursor.fetchall()
DisconnectDatabase(databaseConnection)
return databaseResultDataRows
def ClientRequestQuery(request) :
dbQuery = request.GET.get('query',';')
print dbQuery
return HttpResponse(ExecuteQueryToDatabase(dbQuery))
def TestQuery(request):
ExecuteQueryToDatabase('insert into User2 (`a`, `b`, `c`, `d`) values(1, 2, 3, 4);');
return HttpResponse("test")
代码只是连接到 MariaDB 并插入一些数据, 但是当我尝试这段代码时,数据没有错误地消失了并且 "test" 成功返回
table结构是
MariaDB [ServiceDatabase]> desc User2;
│+-------+---------+------+-----+---------+-------+
│| Field | Type | Null | Key | Default | Extra |
│+-------+---------+------+-----+---------+-------+
│| a | int(11) | NO | | NULL | |
│| b | int(11) | NO | | NULL | |
│| c | int(11) | NO | | NULL | |
│| d | int(11) | NO | | NULL | |
│+-------+---------+------+-----+---------+-------+
│4 rows in set (0.00 sec)
Django版本为10.0.2 Python 版本为 2.7.12
谁能帮帮我?
您在代码中的任何时候都没有执行 commit
。使用 python 在数据库上执行插入的一般方法是
1) 创建连接和游标
conn = MySQLdb.connect(host= "hostname",
user="root",
passwd="password",
db="dbname")
x = conn.cursor()
2) 执行插入,如果事务失败则提交或回滚
try:
x.execute("INSERT INTO User2 (a, b, c, d) VALUES (%s, %s, %s, %s)", (1,2,3,4))
conn.commit()
except:
conn.rollback()
conn.close()
据我所知,您从未执行过 commit()
,因此交易实际上从未完成。
使用 mariadb
连接器并像
autocommit=True
# Module Import
import mariadb
# Instantiate Connection
try:
conn = mariadb.connect(
user="john",
password="secret",
host="localhost",
port=3306,
autocommit=True)
except mariadb.Error as e:
print(f"Error connecting to MariaDB Platform: {e}")
sys.exit(1)