小编Ben*_*ber的帖子

无法在AppEngine Python上使用带有CloudSQL的utf8mb4字符集

我已经设置了一个CloudSQL实例,我试图在AppEngine上使用我的Django应用程序.我已经确认服务器设置为utf8mb4通过CloudSQL控制台为我的数据库使用字符集:

utf8mb4 utf8mb4_unicode_ci
Run Code Online (Sandbox Code Playgroud)

如果我直接连接mysql cli,我可以成功插入和读取emojis.但是,如果我通过Django管理员插入相同的表情符号字符,它只是插入"?????".

我试图确保MySQLdb-python客户端使用utf8mb4:

'ENGINE': 'django.db.backends.mysql',
...
'OPTIONS': {
    'charset': "utf8mb4",
}
Run Code Online (Sandbox Code Playgroud)

但这导致我在AppEngine上收到以下错误:

(2019, "Can't initialize character set utf8mb4 (path: /usr/local/mysql/share/charsets/)")
Run Code Online (Sandbox Code Playgroud)

我的app.yaml正在使用"最新的"MySQLdb库:

libraries:
- name: MySQLdb
  version: "latest"
Run Code Online (Sandbox Code Playgroud)

python mysql django google-app-engine

6
推荐指数
1
解决办法
821
查看次数

如何通过第一次出现的分隔符来分割字符串?

例如,我有一个文件,其中的行如下所示:

KEY1=value1
KEY2=value2
Run Code Online (Sandbox Code Playgroud)

有时字符串的值部分也包含=字符:

KEY1=value1=thing1
KEY2=value2=thing2
Run Code Online (Sandbox Code Playgroud)

在 Python 中,如果我只想要 KEY=value 对,那么我会这样做:

>>> s = "KEY1=value1=thing1"
>>> key, value = s.split("=", 1)
>>> print(key)
KEY1
>>> print(value)
value1=thing1
Run Code Online (Sandbox Code Playgroud)

在我看来,如何在 Rust 中做到这一点并不明显。

rust

6
推荐指数
1
解决办法
2463
查看次数

如何将SHA256哈希从整数转换为字符串并返回?

我想在MySQL中存储大量的SHA256位哈希值.我不想将它们存储为VARCHAR(64),而是存储为BIGINT.在Python中进行转换的最有效方法是什么?我要完成的代码示例:

>>> import hashlib
>>> s = hashlib.sha256("foo").hexdigest()
>>> s
'2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae'
>>> i = int(s, 16)
>>> i
19970150736239713706088444570146546354146685096673408908105596072151101138862L
Run Code Online (Sandbox Code Playgroud)

鉴于,我怎么回去š到底是什么?我试过了:

>>> hex(i)
'0x2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7aeL'
Run Code Online (Sandbox Code Playgroud)

这很接近但不一样.谢谢!

编辑:我想避免转换十六进制字符串,以摆脱前导0x和尾随L:

>>> hex(i)[2:-1]
'2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae'
Run Code Online (Sandbox Code Playgroud)

此外,如果散列有前导零位,我必须填充零,直到它的长度为64,如:

>>> s = "00000000000000003258ec44ea34c98111234904ef7642608922f9b8b296067d"
>>> i = int(s, 16)
>>> i
1234513556969586830351532907052865231487419381722987759229L
>>> h = hex(i)[2:-1]
>>> h
'3258ec44ea34c98111234904ef7642608922f9b8b296067d'
>>> h = "0" * (64 - len(h)) + h
'00000000000000003258ec44ea34c98111234904ef7642608922f9b8b296067d'
Run Code Online (Sandbox Code Playgroud)

我想避免字符串操作.

python

4
推荐指数
1
解决办法
2193
查看次数

标签 统计

python ×2

django ×1

google-app-engine ×1

mysql ×1

rust ×1