<p>这很管用。我用了一些捷径来节省打字的时间。在</p>
<pre><code>import csv
import sqlite3
import itertools
params = ['No', 'Source', 'Host', 'Link', 'Date', 'Time', 'time2', 'Category', 'AuthorId', 'AuthorName', 'AuthorUrl', 'Auth', 'Followers', 'Following', 'Age', 'Gender', 'Language', 'Country', 'Province', 'City', 'Location', 'Sentiment', 'Title', 'Snippet', 'Description', 'Tags', 'Contents', 'View', 'Comments', 'Rating', 'Favourites', 'Duration', 'Bio', 'UniqueId']
create_str = "CREATE TABLE t (%s);" % ', '.join('"%s"' % p for p in params)
insert_str = "INSERT INTO t VALUES (%s)" % ', '.join(itertools.repeat('?', len(params)))
with open('database.csv') as fin:
dr = csv.DictReader(fin, fieldnames=params, skipinitialspace=True)
lst = [tuple(d[p] for p in params) for d in dr]
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute(create_str)
cur.executemany(insert_str, lst)
con.commit()
for row in cur.execute("select * from t;"):
print(row)
</code></pre>
<p>注意使用字符串格式操作来构建sql查询字符串的错误做法。如果与未知输入数据一起使用,则可能导致sql注入攻击。我之所以在这里这样做是因为字符串是根据已知值构建的,而未知输入(来自文件的)是使用标准“?”正确构建的传递给<code>execute</code>方法的元组占位符。在</p>
<p>请注意,一个表中的参数太多了。它应该在多个表中更加规范化,但我想您在某个时候会了解到这一点。在</p>