将.db文件导入Postgresql数据库

时间:2019-05-18 07:49:58

标签: python sql postgresql sqlite

我目前正在研究将.db文件(包括数据)导入Postgresql数据库的脚本。没有使用第三方工具和使用python的方法,有什么办法?

1 个答案:

答案 0 :(得分:0)

您可以肯定使用Django。

  • python manage.py dumpdata> db.json
  • 将数据库设置更改为新数据库,例如PostgreSQL。
  • python manage.py migration
  • python manage.py shell
  • 在shell中输入以下内容
from django.contrib.contenttypes.models import ContentType
ContentType.objects.all().delete()
  • python manage.py loaddata db.json

否则,如果您想修改自己的方式。 您需要安装psycopg2

$ pip install psycopg2

然后您连接到Postgres。

import psycopg2
conn = psycopg2.connect("host=localhost dbname=postgres user=postgres")

这是您插入值的方式。

cur = conn.cursor()
insert_query = "INSERT INTO users VALUES {}".format("(10, 'hello@dataquest.io', 'Some Name', '123 Fake St.')")
cur.execute(insert_query)
conn.commit()

现在,使用SQLAlchemy,您可以轻松打开SQLite文件。

import sqlite3
conn = sqlite3.connect('database.db')

获取数据。

r = conn.execute("""SELECT * FROM books""")
r.fetchall()

这里是如何从SQLite获取所有表

数据库中的所有表名:

SELECT name FROM sqlite_master WHERE type = 'table'

sqlite_master可以看作是包含有关数据库(元数据)信息的表。

一种快速但最有可能效率低下的方法(因为它将运行700个查询以及700个单独的结果集),以获取表名列表,遍历这些表并返回columnA =“-”的数据:

for row in connection.execute('SELECT name FROM sqlite_master WHERE type = "table" ORDER BY name').fetchall()
    for result in connection.execute('SELECT * FROM ' + row[1] + ' WHERE "columnA" = "-"').fetchall()
    # do something with results

这是另一种方法

import sqlite3
try:
    conn = sqlite3.connect('/home/rolf/my.db')
except sqlite3.Error as e:
    print('Db Not found', str(e))
db_list = []
mycursor = conn.cursor()
for db_name in mycursor.execute("SELECT name FROM sqlite_master WHERE type = 'table'"):
    db_list.append(db_name)
for x in db_list:
    print "Searching",x[0]
    try:
        mycursor.execute('SELECT * FROM '+x[0]+' WHERE columnA" = "-"')
        stats = mycursor.fetchall()
        for stat in stats:
            print stat, "found in ", x
    except sqlite3.Error as e:
       continue
conn.close()