Python 我的前导零去哪里了?
我从逗号分隔的文本文件中读取数字,其中一些数字的格式为000000084。这些文件被添加到messageclass中,然后放入SQLite数据库中。我的问题是SQLite将这些000000084保存为84,即使我将表列创建为字符串 输入文件Python 我的前导零去哪里了?,python,sqlite,Python,Sqlite,我从逗号分隔的文本文件中读取数字,其中一些数字的格式为000000084。这些文件被添加到messageclass中,然后放入SQLite数据库中。我的问题是SQLite将这些000000084保存为84,即使我将表列创建为字符串 输入文件 something,000000018,213123 somethingelse,000000025,213123 创建数据库: def createDatabase(databasepath): con = lite.connect(databa
something,000000018,213123
somethingelse,000000025,213123
创建数据库:
def createDatabase(databasepath):
con = lite.connect(databasepath)
with con:
cur = con.cursor()
cur.execute("CREATE TABLE staticMessage(userid string)")
def writeStaticToDatabase(databasepath):
con = lite.connect(databasepath)
con.isolation_level = None
with con:
cur = con.cursor()
cur.execute('BEGIN TRANSACTION')
for i in range(0, len(staticMessage)):
cur.execute("INSERT INTO staticMessage(userid) VALUES(?)",
(staticMessage[i].userid)
cur.execute('COMMIT')
消息类:
class StaticMessage:
def __init__ (self, userid):
self.userid = userid
正在从文件中提取消息:
def extractStaticMessages(filepath):
global staticMessage
staticMessage = []
lengths = []
f = open(filepath, 'r')
for line in f:
newline = line.split(",")
message = StaticMessage(newline[1])
staticMessage.append(message)
正在将消息写入数据库:
def createDatabase(databasepath):
con = lite.connect(databasepath)
with con:
cur = con.cursor()
cur.execute("CREATE TABLE staticMessage(userid string)")
def writeStaticToDatabase(databasepath):
con = lite.connect(databasepath)
con.isolation_level = None
with con:
cur = con.cursor()
cur.execute('BEGIN TRANSACTION')
for i in range(0, len(staticMessage)):
cur.execute("INSERT INTO staticMessage(userid) VALUES(?)",
(staticMessage[i].userid)
cur.execute('COMMIT')
然后,当我使用f.ex查询我的数据库时:
select userid from staticMessage where userid='000000084'
我得到了84
这对我来说是一个很大的麻烦,因为我想查询我的数据库以获得少于9位的用户ID
TL/DR:插入SQLite时,我的前导零在哪里?
000000084
不是数字,84
是数字。您希望将它们存储在SQLite的文本数据字段中。SQLite不强制强列类型。相反,SQLite使用一种称为类型关联的东西:有一种首选的存储类型,它是从列声明和一些内部规则派生出来的,但是您可以很好地将文本存储为数字,反之亦然
以下内容清楚地解释了将确定用于存储数据的类型的规则:
列的关联性由声明的
列,按照以下规则的顺序显示:
鉴于我们的特殊需要,您应该使用文本关联声明您的列。也就是说,使用一个包含字符串
CHAR
、CLOB
或TEXT
类型的类型(规则2)。只是一个小提示,您应该明确使用它来读取文件中的值,而不是滚动自己的值。您只需在staticMessage:中对消息执行,不需要范围和数组索引。当你说“我得到84”时,你能展示一下你是如何显示的吗?这可能是问题所在,而不是数据错误地存储在数据库中。您是否已签入原始数据库表以查看它是否作为“000000084”
插入?显示表架构。@Aruistante感谢您的回答。通过运行上面显示的查询,我得到了84。ubuntu终端输出84。但是你是对的,有可能它确实被保存了,但是它在输出中被削减了。@ingacio vazquez abrams表格模式显示在我创建表格的地方,你不能直接转换int('0000000 84')
?谢谢你的回答,我会试试看。