gpt4 book ai didi

cjk - 如何在pymysql中使用汉字建表?

转载 作者:行者123 更新时间:2023-12-02 04:30:53 25 4
gpt4 key购买 nike

1.sqlite3

import sqlite3
con=sqlite3.connect("g:\\mytest1.db")
cur=con.cursor()
cur.execute('create table test (上市 TEXT)')
con.commit()
cur.close()
con.close()

我成功创建了一个测试表 mytest1.db ,并添加了一个汉字名称“上市”作为字段。

2.在mysql命令控制台中。

C:\Users\root>mysql -uroot -p   
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> create database mytest2;
Query OK, 1 row affected (0.00 sec)
mysql> use mytest2;
Database changed
mysql> set names "gb2312";
Query OK, 0 rows affected (0.00 sec)
mysql> create table stock(上市 TEXT) ;
Query OK, 0 rows affected (0.07 sec)

可以得出结论:mysql控制台可以使用汉字。

3.pymysql

代码31

import pymysql
con = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='******')
cur=con.cursor()
cur.execute("create database if not exists mytest31")
cur.execute("use mytest31")
cur.execute('set names "gb2312" ')
cur.execute('create table stock(上市 TEXT) ')
con.commit()

代码32

import pymysql
con = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='******')
cur=con.cursor()
cur.execute("create database if not exists mytest32")
cur.execute("use mytest32")
cur.execute('set names "gb2312" ')
cur.execute('create table stock(上市 TEXT) ')
con.commit()

出现同样的问题

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 21-22: o rdinal not in range(256)

4.mysql-python-connect

代码41

import mysql.connector  
config={'host':'127.0.0.1',
'user':'root',
'password':'123456',
'port':3306 ,
'charset':'utf8'
}

con=mysql.connector.connect(**config)
cur=con.cursor()
cur.execute("create database if not exists mytest41")
cur.execute("use mytest41")
cur.execute('set names "gb2312" ')
str='create table stock(上市 TEXT)'
cur.execute(str)

代码42

import mysql.connector  
config={'host':'127.0.0.1',
'user':'root',
'password':'******',
'port':3306 ,
'charset':'utf8'
}

con=mysql.connector.connect(**config)
cur=con.cursor()
cur.execute("create database if not exists mytest42")
cur.execute("use mytest42")
cur.execute('set names "gb2312" ')
str='create table stock(上市.encode("utf-8") TEXT)'
cur.execute(str)

与 pymysql 中相同的错误。

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 22-23: o
rdinal not in range(256)

不能使用汉字作为字段名,肯定是python mysql模块的一个bug。
1.python sqlite3模块中可以使用汉字作为字段名。
2.只有'set name "gb2312"'才能在mysql控制台使用汉字作为字段名

最佳答案

pymysql.connect() accepts a charset argument 。我已经测试了 charset="utf8"charset="gb2312" 并且两者都有效(Python 3,PyMySQL 0.6.2)。在这种情况下,您不需要使用“SET NAMES”查询。

import pymysql
con = pymysql.connect(host='127.0.0.1', port=3306,
user='root', passwd='******',
charset="utf8")
cur = con.cursor()
cur.execute("create database if not exists mytest31")
cur.execute("use mytest31")
cur.execute("create table stock(上市 TEXT)")
con.commit()

关于cjk - 如何在pymysql中使用汉字建表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23177536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com