我需要将龙卷风中的JSON数据插入到postgres中,所以这里的测试如下:
from psycopg2 import connect
conn = connect("user='pguser' host='localhost' dbname='pgdb' password='pgpass'")
cursor = conn.cursor()
data = '[{"id":"sdf","name":"wqe","author":"vb"}]'
for row in eval(data):
print row
cursor.execute("""INSERT INTO books(id,name,author) VALUES('%s','%s','%s')""" % \
(row['id'], row['name'], row['author'])
)
>>> cursor.execute("SELECT * FROM books")
>>> cursor.fetchall()
[('sdf', 'wqe', 'vb')]
>>>
$> psql -d pgdb -U pguser -W
Password for user pguser:
psql (9.1.6)
Type "help" for help.
pgdb=> select * from books;
id | name | author
----+------+--------
(0 rows)
Run Code Online (Sandbox Code Playgroud)
正如你select在python shell中看到的那样,有一些数据,但在psql中有0行!我可能做错了什么?
Python 2.7.2+
我有两张桌子在这里:
DROP TABLE IF EXISTS schemas.book;
DROP TABLE IF EXISTS schemas.category;
DROP SCHEMA IF EXISTS schemas;
CREATE SCHEMA schemas;
CREATE TABLE schemas.category (
id BIGSERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
UNIQUE(name)
);
CREATE TABLE schemas.book (
id BIGSERIAL PRIMARY KEY,
published DATE NOT NULL,
category_id BIGINT NOT NULL REFERENCES schemas.category ON DELETE CASCADE ON UPDATE CASCADE,
author VARCHAR NOT NULL,
name VARCHAR NOT NULL,
UNIQUE(published, author, name),
FOREIGN KEY(category_id) REFERENCES schemas.category (id)
);
Run Code Online (Sandbox Code Playgroud)
所以逻辑很简单,用户删除了类别x下的所有书籍后,x从猫中删除,我尝试了上面的方法但是不起作用,在我清理了表格书之后,表格类别仍然填充,有什么问题?
这很好用:
cc.execute("select * from books where name like '%oo%'")
Run Code Online (Sandbox Code Playgroud)
但如果第二个论点通过:
cursor.execute("select * from books where name like '%oo%' OFFSET % LIMIT %", (0,1))
Run Code Online (Sandbox Code Playgroud)
Psycopg错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)
如何避免这个错误?
我的意思是像数千名用户及时更新数据库中的值?
我正在使用facebook的龙卷风演示
但我不想使用MySQL并尝试用PG替换它所以我继续进行修改,如下所示:
define("port", default=8888, help="run on the given port", type=int)
define("pgsql_host", default="127.0.0.1:5432", help="blog database host")
define("pgsql_database", default="pgdb", help="blog database name")
define("pgsql_user", default="admin", help="blog database user")
define("pgsql_password", default="pgpass", help="blog database password")
Run Code Online (Sandbox Code Playgroud)
和
# Have one global connection to the blog DB across all handlers
self.db = tornado.database.Connection(
host=options.pgsql_host, database=options.pgsql_database,
user=options.pgsql_user, password=options.pgsql_password)
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,应用程序会挂起,如何正确地将其迁移到PG?
实际上我在一段时间后得到错误:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/tornado-2.4.1-py2.7.egg/tornado/database.py", line 84, in __init__
self.reconnect()
File "/usr/local/lib/python2.7/dist-packages/tornado-2.4.1-py2.7.egg/tornado/database.py", line 101, in reconnect
self._db = MySQLdb.connect(**self._db_args)
File "/usr/lib/pymodules/python2.7/MySQLdb/__init__.py", line 81, in …Run Code Online (Sandbox Code Playgroud)